Mercurial > pub > ImplabNet
diff Implab/Parsing/IAlphabet.cs @ 161:2a8466f0cb8a v2
DFA refactoring
author | cin |
---|---|
date | Fri, 19 Feb 2016 18:07:17 +0300 |
parents | 130781364799 |
children |
line wrap: on
line diff
--- a/Implab/Parsing/IAlphabet.cs Thu Feb 18 19:38:54 2016 +0300 +++ b/Implab/Parsing/IAlphabet.cs Fri Feb 19 18:07:17 2016 +0300 @@ -12,43 +12,31 @@ /// <remarks> /// <para>Алфавит является сюрьективным отображением множества символов в множество индексов, это позволяет сократить размер таблицы переходов автомата /// для входных символов, которые для него не различимы.</para> - /// <para>Далее символами алфавита будем называть классы исходных символов.</para> /// </remarks> /// <typeparam name="TSymbol">Тип символов.</typeparam> public interface IAlphabet<TSymbol> { /// <summary> - /// Количество символов в алфавите. + /// Количество классов символов в алфавите. /// </summary> int Count { get; } - /// <summary> - /// Добавляет новый символ в алфавит, если символ уже был добавлен, то - /// возвращается ранее сопоставленный с символом класс. - /// </summary> - /// <param name="symbol">Символ для добавления.</param> - /// <returns>Индекс класса, который попоставлен с символом.</returns> - int DefineSymbol(TSymbol symbol); + /// <summary> - /// Доабвляем класс символов. Множеству указанных исходных символов - /// будет сопоставлен символ в алфавите. - /// </summary> - /// <param name="symbols">Множестов исходных символов</param> - /// <returns>Идентификатор символа алфавита.</returns> - int DefineClass(IEnumerable<TSymbol> symbols); - /// <summary> - /// Создает карту обратного сопоставления символа алфавита и сопоставленным + /// Создает карту обратного сопоставления класса символов алфавита и сопоставленным /// ему исходным символам. /// </summary> /// <returns></returns> List<TSymbol>[] CreateReverseMap(); + /// <summary> /// Создает новый алфавит на основе текущего, горппируя его сиволы в более /// крупные непересекающиеся классы символов. /// </summary> /// <param name="newAlphabet">Новый, пустой алфавит, в котором быдут определены классы.</param> /// <param name="classes">Множество классов символов текущего алфавита.</param> - /// <returns>Карта для перехода символов текущего - /// алфавита к символам нового.</returns> - int[] Reclassify(IAlphabet<TSymbol> newAlphabet, IEnumerable<ICollection<int>> classes); + /// <returns>Карта для перехода классов текущего + /// алфавита к классам нового.</returns> + /// <remarks>Ползволяет укрупнить алфавит, объединив классы в текущем алфавите. Используется при оптимизации автомата.</remarks> + int[] Reclassify(IAlphabetBuilder<TSymbol> newAlphabet, IEnumerable<ICollection<int>> classes); /// <summary> /// Преобразует входной символ в индекс символа из алфавита.