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