diff Implab/Parsing/IAlphabet.cs @ 161:2a8466f0cb8a v2

DFA refactoring
author cin
date Fri, 19 Feb 2016 18:07:17 +0300
parents 130781364799
children
line wrap: on
line diff
--- a/Implab/Parsing/IAlphabet.cs	Thu Feb 18 19:38:54 2016 +0300
+++ b/Implab/Parsing/IAlphabet.cs	Fri Feb 19 18:07:17 2016 +0300
@@ -12,43 +12,31 @@
     /// <remarks>
     /// <para>Алфавит является сюрьективным отображением множества символов в множество индексов, это позволяет сократить размер таблицы переходов автомата
     /// для входных символов, которые для него не различимы.</para>
-    /// <para>Далее символами алфавита будем называть классы исходных символов.</para>
     /// </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);
+        /// <returns>Карта для перехода классов текущего
+        /// алфавита к классам нового.</returns>
+        /// <remarks>Ползволяет укрупнить алфавит, объединив классы в текущем алфавите. Используется при оптимизации автомата.</remarks>
+        int[] Reclassify(IAlphabetBuilder<TSymbol> newAlphabet, IEnumerable<ICollection<int>> classes);
 
         /// <summary>
         /// Преобразует входной символ в индекс символа из алфавита.