Mercurial > pub > ImplabNet
comparison Implab/Automaton/IDFADefinition.cs @ 162:0526412bbb26 ref20160224
DFA refactoring
| author | cin |
|---|---|
| date | Wed, 24 Feb 2016 08:39:53 +0300 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 161:2a8466f0cb8a | 162:0526412bbb26 |
|---|---|
| 1 | |
| 2 namespace Implab.Automaton { | |
| 3 /// <summary> | |
| 4 /// Полностью описывает DFA автомат, его поведение, состояние и входные символы. | |
| 5 /// </summary> | |
| 6 /// <example> | |
| 7 /// class MyAutomaton { | |
| 8 /// int m_current; | |
| 9 /// readonly DFAStateDescriptor<string>[] m_automaton; | |
| 10 /// readonly IAlphabet<MyCommands> m_commands; | |
| 11 /// | |
| 12 /// public MyAutomaton(IDFADefinition<MyCommands,MyStates,string> definition) { | |
| 13 /// m_current = definition.StateAlphabet.Translate(MyStates.Initial); | |
| 14 /// m_automaton = definition.GetTransitionTable(); | |
| 15 /// m_commands = definition.InputAlphabet; | |
| 16 /// } | |
| 17 /// | |
| 18 /// // defined a method which will move the automaton to the next state | |
| 19 /// public void Move(MyCommands cmd) { | |
| 20 /// // use transition map to determine the next state | |
| 21 /// var next = m_automaton[m_current].transitions[m_commands.Translate(cmd)]; | |
| 22 /// | |
| 23 /// // validate that we aren't in the unreachable state | |
| 24 /// if (next == DFAConst.UNREACHABLE_STATE) | |
| 25 /// throw new InvalidOperationException("The specified command is invalid"); | |
| 26 /// | |
| 27 /// // if everything is ok | |
| 28 /// m_current = next; | |
| 29 /// } | |
| 30 /// } | |
| 31 /// </example> | |
| 32 public interface IDFADefinition<TInput, TState, TTag> { | |
| 33 /// <summary> | |
| 34 /// Алфавит входных символов | |
| 35 /// </summary> | |
| 36 /// <value>The input alphabet.</value> | |
| 37 IAlphabet<TInput> InputAlphabet { | |
| 38 get; | |
| 39 } | |
| 40 | |
| 41 /// <summary> | |
| 42 /// Алфавит состояний автомата | |
| 43 /// </summary> | |
| 44 /// <value>The state alphabet.</value> | |
| 45 IAlphabet<TState> StateAlphabet { | |
| 46 get; | |
| 47 } | |
| 48 | |
| 49 /// <summary> | |
| 50 /// Таблица переходов состояний автомата | |
| 51 /// </summary> | |
| 52 /// <returns>The transition table.</returns> | |
| 53 DFAStateDescriptior<TTag>[] GetTransitionTable(); | |
| 54 | |
| 55 } | |
| 56 } |
