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>