Mercurial > pub > ImplabNet
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Implab/Parsing/IAlphabet.cs Sun Jun 15 19:39:11 2014 +0400 @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Implab.Parsing { + /// <summary> + /// Алфавит. Множество символов, которые разбиты на классы, при этом классы имеют непрерывную нумерацию, + /// что позволяет использовать их в качестве индексов массивов. + /// </summary> + /// <remarks>Далее вимволами алфавита будем называть классы исходных символов.</remarks> + /// <typeparam name="TSymbol">Тип символов.</typeparam> + public interface IAlphabet<TSymbol> { + /// <summary> + /// Количество символов в алфавите. + /// </summary> + int Count { get; } + /// <summary> + /// Добавляет новый символ в алфавит, если символ уже был добавлен, то + /// возвращается ранее сопоставленный с символом класс. + /// </summary> + /// <param name="symbol">Символ для добавления.</param> + /// <returns>Индекс класса, который попоставлен с символом.</returns> + int DefineSymbol(TSymbol symbol); + /// <summary> + /// Доабвляем класс символов. Множеству указанных исходных символов + /// будет сопоставлен символ в алфавите. + /// </summary> + /// <param name="symbols">Множестов исходных символов</param> + /// <returns>Идентификатор символа алфавита.</returns> + int DefineClass(IEnumerable<TSymbol> symbols); + /// <summary> + /// Создает карту обратного сопоставления символа алфавита и сопоставленным + /// ему исходным символам. + /// </summary> + /// <returns></returns> + List<TSymbol>[] CreateReverseMap(); + /// <summary> + /// Создает новый алфавит на основе текущего, горппируя его сиволы в более + /// крупные непересекающиеся классы символов. + /// </summary> + /// <param name="newAlphabet">Новый, пустой алфавит, в котором быдут определены классы.</param> + /// <param name="classes">Множество классов символов текущего алфавита.</param> + /// <returns>Карта для перехода символов текущего + /// алфавита к символам нового.</returns> + int[] Reclassify(IAlphabet<TSymbol> newAlphabet, IEnumerable<ICollection<int>> classes); + + /// <summary> + /// Преобразует входной символ в индекс символа из алфавита. + /// </summary> + /// <param name="symobl">Исходный символ</param> + /// <returns>Индекс в алфавите</returns> + int Translate(TSymbol symobl); + } +}