using System.Collections.Generic; namespace Implab.Automaton { /// /// Полностью описывает DFA автомат, его поведение, состояние и входные символы. /// /// /// class MyAutomaton { /// int m_current; /// readonly DFAStateDescriptor[] m_automaton; /// readonly IAlphabet 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; /// } /// } /// public interface IDFATable : IEnumerable { int StateCount { get; } int AlphabetSize { get; } int InitialState { get; } bool IsFinalState(int s); IEnumerable FinalStates { get; } } }