view Implab/Automaton/IAlphabet.cs @ 253:34df34841225 v3 v3.0.1-beta

Implab.Diagnostics drafts
author cin
date Mon, 12 Feb 2018 17:03:37 +0300
parents 0f70905b4652
children
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Implab.Automaton {
    /// <summary>
    /// Алфавит. Множество символов, которые разбиты на классы, при этом классы имеют непрерывную нумерацию,
    /// что позволяет использовать их в качестве индексов массивов.
    /// </summary>
    /// <remarks>
    /// <para>Алфавит является сюрьективным отображением множества символов в множество индексов, это позволяет сократить размер таблицы переходов автомата
    /// для входных символов, которые для него не различимы.</para>
    /// </remarks>
    /// <typeparam name="TSymbol">Тип символов.</typeparam>
    public interface IAlphabet<TSymbol> {
        /// <summary>
        /// Количество классов символов в алфавите.
        /// </summary>
        int Count { get; }

        /// <summary>
        /// Преобразует входной символ в индекс символа из алфавита.
        /// </summary>
        /// <param name="symobl">Исходный символ</param>
        /// <returns>Индекс в алфавите</returns>
        int Translate(TSymbol symobl);

        bool Contains(TSymbol symbol);

        IEnumerable<TSymbol> GetSymbols(int cls);
    }
}