IDFATable.cs
53 lines
| 1.8 KiB
| text/x-csharp
|
CSharpLexer
cin
|
r289 | using System.Collections.Generic; | ||
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 IDFATable : IEnumerable<AutomatonTransition> { | ||||
int StateCount { | ||||
get; | ||||
} | ||||
int AlphabetSize { | ||||
get; | ||||
} | ||||
int InitialState { | ||||
get; | ||||
} | ||||
bool IsFinalState(int s); | ||||
IEnumerable<int> FinalStates { | ||||
get; | ||||
} | ||||
} | ||||
} | ||||