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