162
+ − 1 using System;
+ − 2 using System.Collections.Generic;
+ − 3 using System.Linq;
+ − 4 using System.Text;
+ − 5 using System.Threading.Tasks;
+ − 6
+ − 7 namespace Implab.Automaton {
+ − 8 /// <summary>
+ − 9 /// Алфавит. Множество символов, которые разбиты на классы, при этом классы имеют непрерывную нумерацию,
+ − 10 /// что позволяет использовать их в качестве индексов массивов.
+ − 11 /// </summary>
+ − 12 /// <remarks>
+ − 13 /// <para>Алфавит является сюрьективным отображением множества символов в множество индексов, это позволяет сократить размер таблицы переходов автомата
+ − 14 /// для входных символов, которые для него не различимы.</para>
+ − 15 /// </remarks>
+ − 16 /// <typeparam name="TSymbol">Тип символов.</typeparam>
+ − 17 public interface IAlphabet<TSymbol> {
+ − 18 /// <summary>
+ − 19 /// Количество классов символов в алфавите.
+ − 20 /// </summary>
+ − 21 int Count { get; }
+ − 22
+ − 23 /// <summary>
+ − 24 /// Преобразует входной символ в индекс символа из алфавита.
+ − 25 /// </summary>
+ − 26 /// <param name="symobl">Исходный символ</param>
+ − 27 /// <returns>Индекс в алфавите</returns>
+ − 28 int Translate(TSymbol symobl);
171
+ − 29
+ − 30 bool Contains(TSymbol symbol);
+ − 31
+ − 32 IEnumerable<TSymbol> GetSymbols(int cls);
162
+ − 33 }
+ − 34 }