Mercurial > pub > ImplabNet
view Implab/Automaton/IDFATable.cs @ 165:e227e78d72e4 ref20160224
DFA refactoring
author | cin |
---|---|
date | Mon, 29 Feb 2016 02:02:17 +0300 |
parents | |
children | b84cdbe82e7f |
line wrap: on
line source
using System.Collections.Generic; namespace Implab.Automaton { /// <summary> /// Полностью описывает DFA автомат, его поведение, состояние и входные символы. /// </summary> /// <example> /// class MyAutomaton { /// int m_current; /// readonly DFAStateDescriptor<string>[] m_automaton; /// readonly IAlphabet<MyCommands> m_commands; /// /// public MyAutomaton(IDFADefinition<MyCommands,MyStates,string> definition) { /// m_current = definition.StateAlphabet.Translate(MyStates.Initial); /// m_automaton = definition.GetTransitionTable(); /// m_commands = definition.InputAlphabet; /// } /// /// // defined a method which will move the automaton to the next state /// public void Move(MyCommands cmd) { /// // use transition map to determine the next state /// var next = m_automaton[m_current].transitions[m_commands.Translate(cmd)]; /// /// // validate that we aren't in the unreachable state /// if (next == DFAConst.UNREACHABLE_STATE) /// throw new InvalidOperationException("The specified command is invalid"); /// /// // if everything is ok /// m_current = next; /// } /// } /// </example> public interface IDFATable { /// <summary> /// Таблица переходов состояний автомата /// </summary> /// <returns>The transition table.</returns> DFAStateDescriptior[] GetTransitionTable(); int StateCount { get; } int AlphabetSize { get; } int InitialState { get; } bool IsFinalState(int s); IEnumerable<int> FinalStates { get; } } }