Mercurial > pub > ImplabNet
comparison Implab/Parsing/IAlphabet.cs @ 161:2a8466f0cb8a v2
DFA refactoring
| author | cin |
|---|---|
| date | Fri, 19 Feb 2016 18:07:17 +0300 |
| parents | 130781364799 |
| children |
comparison
equal
deleted
inserted
replaced
| 160:5802131432e4 | 161:2a8466f0cb8a |
|---|---|
| 10 /// что позволяет использовать их в качестве индексов массивов. | 10 /// что позволяет использовать их в качестве индексов массивов. |
| 11 /// </summary> | 11 /// </summary> |
| 12 /// <remarks> | 12 /// <remarks> |
| 13 /// <para>Алфавит является сюрьективным отображением множества символов в множество индексов, это позволяет сократить размер таблицы переходов автомата | 13 /// <para>Алфавит является сюрьективным отображением множества символов в множество индексов, это позволяет сократить размер таблицы переходов автомата |
| 14 /// для входных символов, которые для него не различимы.</para> | 14 /// для входных символов, которые для него не различимы.</para> |
| 15 /// <para>Далее символами алфавита будем называть классы исходных символов.</para> | |
| 16 /// </remarks> | 15 /// </remarks> |
| 17 /// <typeparam name="TSymbol">Тип символов.</typeparam> | 16 /// <typeparam name="TSymbol">Тип символов.</typeparam> |
| 18 public interface IAlphabet<TSymbol> { | 17 public interface IAlphabet<TSymbol> { |
| 19 /// <summary> | 18 /// <summary> |
| 20 /// Количество символов в алфавите. | 19 /// Количество классов символов в алфавите. |
| 21 /// </summary> | 20 /// </summary> |
| 22 int Count { get; } | 21 int Count { get; } |
| 22 | |
| 23 /// <summary> | 23 /// <summary> |
| 24 /// Добавляет новый символ в алфавит, если символ уже был добавлен, то | 24 /// Создает карту обратного сопоставления класса символов алфавита и сопоставленным |
| 25 /// возвращается ранее сопоставленный с символом класс. | |
| 26 /// </summary> | |
| 27 /// <param name="symbol">Символ для добавления.</param> | |
| 28 /// <returns>Индекс класса, который попоставлен с символом.</returns> | |
| 29 int DefineSymbol(TSymbol symbol); | |
| 30 /// <summary> | |
| 31 /// Доабвляем класс символов. Множеству указанных исходных символов | |
| 32 /// будет сопоставлен символ в алфавите. | |
| 33 /// </summary> | |
| 34 /// <param name="symbols">Множестов исходных символов</param> | |
| 35 /// <returns>Идентификатор символа алфавита.</returns> | |
| 36 int DefineClass(IEnumerable<TSymbol> symbols); | |
| 37 /// <summary> | |
| 38 /// Создает карту обратного сопоставления символа алфавита и сопоставленным | |
| 39 /// ему исходным символам. | 25 /// ему исходным символам. |
| 40 /// </summary> | 26 /// </summary> |
| 41 /// <returns></returns> | 27 /// <returns></returns> |
| 42 List<TSymbol>[] CreateReverseMap(); | 28 List<TSymbol>[] CreateReverseMap(); |
| 29 | |
| 43 /// <summary> | 30 /// <summary> |
| 44 /// Создает новый алфавит на основе текущего, горппируя его сиволы в более | 31 /// Создает новый алфавит на основе текущего, горппируя его сиволы в более |
| 45 /// крупные непересекающиеся классы символов. | 32 /// крупные непересекающиеся классы символов. |
| 46 /// </summary> | 33 /// </summary> |
| 47 /// <param name="newAlphabet">Новый, пустой алфавит, в котором быдут определены классы.</param> | 34 /// <param name="newAlphabet">Новый, пустой алфавит, в котором быдут определены классы.</param> |
| 48 /// <param name="classes">Множество классов символов текущего алфавита.</param> | 35 /// <param name="classes">Множество классов символов текущего алфавита.</param> |
| 49 /// <returns>Карта для перехода символов текущего | 36 /// <returns>Карта для перехода классов текущего |
| 50 /// алфавита к символам нового.</returns> | 37 /// алфавита к классам нового.</returns> |
| 51 int[] Reclassify(IAlphabet<TSymbol> newAlphabet, IEnumerable<ICollection<int>> classes); | 38 /// <remarks>Ползволяет укрупнить алфавит, объединив классы в текущем алфавите. Используется при оптимизации автомата.</remarks> |
| 39 int[] Reclassify(IAlphabetBuilder<TSymbol> newAlphabet, IEnumerable<ICollection<int>> classes); | |
| 52 | 40 |
| 53 /// <summary> | 41 /// <summary> |
| 54 /// Преобразует входной символ в индекс символа из алфавита. | 42 /// Преобразует входной символ в индекс символа из алфавита. |
| 55 /// </summary> | 43 /// </summary> |
| 56 /// <param name="symobl">Исходный символ</param> | 44 /// <param name="symobl">Исходный символ</param> |
