165
|
1 using System.Collections.Generic;
|
|
2
|
|
3
|
|
4 namespace Implab.Automaton {
|
|
5 /// <summary>
|
|
6 /// Полностью описывает DFA автомат, его поведение, состояние и входные символы.
|
|
7 /// </summary>
|
|
8 /// <example>
|
|
9 /// class MyAutomaton {
|
|
10 /// int m_current;
|
|
11 /// readonly DFAStateDescriptor<string>[] m_automaton;
|
|
12 /// readonly IAlphabet<MyCommands> m_commands;
|
|
13 ///
|
|
14 /// public MyAutomaton(IDFADefinition<MyCommands,MyStates,string> definition) {
|
|
15 /// m_current = definition.StateAlphabet.Translate(MyStates.Initial);
|
|
16 /// m_automaton = definition.GetTransitionTable();
|
|
17 /// m_commands = definition.InputAlphabet;
|
|
18 /// }
|
|
19 ///
|
|
20 /// // defined a method which will move the automaton to the next state
|
|
21 /// public void Move(MyCommands cmd) {
|
|
22 /// // use transition map to determine the next state
|
|
23 /// var next = m_automaton[m_current].transitions[m_commands.Translate(cmd)];
|
|
24 ///
|
|
25 /// // validate that we aren't in the unreachable state
|
|
26 /// if (next == DFAConst.UNREACHABLE_STATE)
|
|
27 /// throw new InvalidOperationException("The specified command is invalid");
|
|
28 ///
|
|
29 /// // if everything is ok
|
|
30 /// m_current = next;
|
|
31 /// }
|
|
32 /// }
|
|
33 /// </example>
|
166
|
34 public interface IDFATable : IEnumerable<AutomatonTransition> {
|
165
|
35 int StateCount {
|
|
36 get;
|
|
37 }
|
|
38
|
|
39 int AlphabetSize {
|
|
40 get;
|
|
41 }
|
|
42
|
|
43 int InitialState {
|
|
44 get;
|
|
45 }
|
|
46
|
|
47 bool IsFinalState(int s);
|
|
48
|
|
49 IEnumerable<int> FinalStates {
|
|
50 get;
|
|
51 }
|
|
52 }
|
|
53 }
|