namespace Implab.Automaton {
///
/// Полностью описывает DFA автомат, его поведение, состояние и входные символы.
///
///
/// class MyAutomaton {
/// int m_current;
/// readonly DFAStateDescriptor[] m_automaton;
/// readonly IAlphabet 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;
/// }
/// }
///
public interface IDFADefinition {
///
/// Алфавит входных символов
///
/// The input alphabet.
IAlphabet InputAlphabet {
get;
}
///
/// Алфавит состояний автомата
///
/// The state alphabet.
IAlphabet StateAlphabet {
get;
}
///
/// Таблица переходов состояний автомата
///
/// The transition table.
DFAStateDescriptior[] GetTransitionTable();
}
}