##// END OF EJS Templates
sync
sync

File last commit:

r55:c0bf853aa04f default
r103:b3f5bc613905 v2
Show More
IAlphabet.cs
56 lines | 3.4 KiB | text/x-csharp | CSharpLexer
cin
Added initial JSON support...
r55 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);
}
}