using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Implab.Automaton { /// /// Алфавит. Множество символов, которые разбиты на классы, при этом классы имеют непрерывную нумерацию, /// что позволяет использовать их в качестве индексов массивов. /// /// /// Алфавит является сюрьективным отображением множества символов в множество индексов, это позволяет сократить размер таблицы переходов автомата /// для входных символов, которые для него не различимы. /// /// Тип символов. public interface IAlphabet { /// /// Количество классов символов в алфавите. /// int Count { get; } /// /// Преобразует входной символ в индекс символа из алфавита. /// /// Исходный символ /// Индекс в алфавите int Translate(TSymbol symobl); bool Contains(TSymbol symbol); IEnumerable GetSymbols(int cls); } }