view Implab/Automaton/IDFATable.cs @ 253:34df34841225 v3 v3.0.1-beta

Implab.Diagnostics drafts
author cin
date Mon, 12 Feb 2018 17:03:37 +0300
parents 0f70905b4652
children
line wrap: on
line source

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