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 IDFADefinition { /// /// Алфавит входных символов /// /// The input alphabet. IAlphabet InputAlphabet { get; } /// /// Алфавит состояний автомата /// /// The state alphabet. IAlphabet StateAlphabet { get; } /// /// Таблица переходов состояний автомата /// /// The transition table. DFAStateDescriptior[] GetTransitionTable(); } }