| 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 } |