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&lt;MyCommands,MyStates,string&gt; 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 }