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