Mercurial > pub > ImplabNet
comparison Implab/Automaton/IAlphabet.cs @ 162:0526412bbb26 ref20160224
DFA refactoring
author | cin |
---|---|
date | Wed, 24 Feb 2016 08:39:53 +0300 |
parents | |
children | 0f70905b4652 |
comparison
equal
deleted
inserted
replaced
161:2a8466f0cb8a | 162:0526412bbb26 |
---|---|
1 using System; | |
2 using System.Collections.Generic; | |
3 using System.Linq; | |
4 using System.Text; | |
5 using System.Threading.Tasks; | |
6 | |
7 namespace Implab.Automaton { | |
8 /// <summary> | |
9 /// Алфавит. Множество символов, которые разбиты на классы, при этом классы имеют непрерывную нумерацию, | |
10 /// что позволяет использовать их в качестве индексов массивов. | |
11 /// </summary> | |
12 /// <remarks> | |
13 /// <para>Алфавит является сюрьективным отображением множества символов в множество индексов, это позволяет сократить размер таблицы переходов автомата | |
14 /// для входных символов, которые для него не различимы.</para> | |
15 /// </remarks> | |
16 /// <typeparam name="TSymbol">Тип символов.</typeparam> | |
17 public interface IAlphabet<TSymbol> { | |
18 /// <summary> | |
19 /// Количество классов символов в алфавите. | |
20 /// </summary> | |
21 int Count { get; } | |
22 | |
23 /// <summary> | |
24 /// Создает карту обратного сопоставления класса символов алфавита и сопоставленным | |
25 /// ему исходным символам. | |
26 /// </summary> | |
27 /// <returns></returns> | |
28 List<TSymbol>[] CreateReverseMap(); | |
29 | |
30 /// <summary> | |
31 /// Создает новый алфавит на основе текущего, горппируя его сиволы в более | |
32 /// крупные непересекающиеся классы символов. | |
33 /// </summary> | |
34 /// <param name="newAlphabet">Новый, пустой алфавит, в котором быдут определены классы.</param> | |
35 /// <param name="classes">Множество классов символов текущего алфавита.</param> | |
36 /// <returns>Карта для перехода классов текущего | |
37 /// алфавита к классам нового.</returns> | |
38 /// <remarks>Ползволяет укрупнить алфавит, объединив классы в текущем алфавите. Используется при оптимизации автомата.</remarks> | |
39 int[] Reclassify(IAlphabetBuilder<TSymbol> newAlphabet, IEnumerable<IEnumerable<int>> classes); | |
40 | |
41 /// <summary> | |
42 /// Преобразует входной символ в индекс символа из алфавита. | |
43 /// </summary> | |
44 /// <param name="symobl">Исходный символ</param> | |
45 /// <returns>Индекс в алфавите</returns> | |
46 int Translate(TSymbol symobl); | |
47 } | |
48 } |