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