Example #1
0
        /// <summary>
        /// Создание автомата по таблице
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        private DeterminedFiniteAutomaton TableToDFA(List <List <string> > table)
        {
            DeterminedFiniteAutomaton dfa = new DeterminedFiniteAutomaton(startStates[0]);

            states.Remove(startStates[0]);
            foreach (var sequence in symbolsSequence)
            {
                foreach (var symbol in sequence)
                {
                    if (!dfa.IsSymbolExist(symbol))
                    {
                        dfa.AddSymbol(symbol);
                    }
                }
            }
            for (int i = 0; i < states.Count; i++)
            {
                dfa.AddState(states[i]);
            }
            dfa.SetFinalStates(new HashSet <string>(finalStates));
            for (int j = 0; j < transitions.Count; j++)
            {
                dfa.AddTransition(transitions[j].Source, transitions[j].Destinations[0], transitions[j].Symbol);
            }
            return(dfa);
        }
Example #2
0
        /// <summary>
        /// Пример работы с автоматами
        /// </summary>
        static void AutomataSample()
        {
            DeterminedFiniteAutomaton dfa = new DeterminedFiniteAutomaton("q0");

            dfa.AddSymbol("a");
            dfa.AddToFinalStates("q0");
            dfa.AddTransition("q0", "q0", "a");
            dfa.AddSymbol("b");
            dfa.AddState("q1");
            dfa.AddState("q2");
            dfa.AddTransition("q0", "q2", "b");
            dfa.AddTransition("q2", "q1", "b");
            dfa.AddToFinalStates("q1");
            string fromQ0ByB = dfa.GetTransitionDestination("q0", "b");

            Console.WriteLine("Переход по символу b из состояния q0 приведёт в состояние: {0}", fromQ0ByB);
        }