Mercurial > pub > ImplabNet
view Implab/Automaton/IDFADefinition.cs @ 163:419aa51b04fd ref20160224
JSON moved to Formats namespace
Working in RegularDFA
author | cin |
---|---|
date | Wed, 24 Feb 2016 20:12:52 +0300 |
parents | 0526412bbb26 |
children |
line wrap: on
line source
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 IDFADefinition<TInput, TState, TTag> { /// <summary> /// Алфавит входных символов /// </summary> /// <value>The input alphabet.</value> IAlphabet<TInput> InputAlphabet { get; } /// <summary> /// Алфавит состояний автомата /// </summary> /// <value>The state alphabet.</value> IAlphabet<TState> StateAlphabet { get; } /// <summary> /// Таблица переходов состояний автомата /// </summary> /// <returns>The transition table.</returns> DFAStateDescriptior<TTag>[] GetTransitionTable(); } }