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 }