예제 #1
0
        static void AutomataSample2()
        {
            NondeterminedFiniteAutomaton nfa = new NondeterminedFiniteAutomaton();

            nfa.AddState("q0");
            nfa.AddToStartStates("q0");
            nfa.AddSymbol("a");
            nfa.AddToFinalStates("q0");
            nfa.AddTransition("q0", "q0", "a");
            nfa.AddSymbol("b");
            nfa.AddState("q1");
            nfa.AddState("q2");
            nfa.AddTransition("q0", "q2", "b");
            nfa.AddTransition("q2", "q1", "b");
            nfa.AddToFinalStates("q1");
            var fromQ0ByB = nfa.GetTransitionDestinations("q0", "b");

            if (fromQ0ByB.Count() != 0)
            {
                Console.WriteLine("Переход по символу b из состояния q0 приведёт в состояния: ");
                foreach (var state in fromQ0ByB)
                {
                    Console.Write(state + " ");
                }
            }
            else
            {
                Console.WriteLine("По символу b из q0 нет переходов.");
            }
        }
예제 #2
0
        static void AutomataSample3()
        {
            NondeterminedFiniteAutomaton nfa = new NondeterminedFiniteAutomaton();

            nfa.AddState("q0");
            nfa.AddState("q1");
            nfa.AddState("q2");
            nfa.AddToFinalStates("q2");
            nfa.AddToStartStates("q0");
            nfa.AddSymbol("А");
            nfa.AddSymbol("Б");
            nfa.AddTransition("q0", "q2", "А");
            nfa.
            AddTransitionBySymbolsSequence("q0", "q1", new List <string>()
            {
                "А", "Б", "А"
            });
            nfa.AddTransition("q1", "q2", "Б");
            var fromQ0ByA = nfa.GetTransitionDestinations("q0", "А");

            if (fromQ0ByA.Count() != 0)
            {
                Console.WriteLine("Переход по символу А из состояния q0 приведёт в состояния: ");
                foreach (var state in fromQ0ByA)
                {
                    Console.Write(state + " ");
                }
            }
            else
            {
                Console.WriteLine("По символу А из q0 нет переходов.");
            }
        }
예제 #3
0
        /// <summary>
        /// Создание автомата по таблице
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        private NondeterminedFiniteAutomaton TableToNFA(List <List <string> > table)
        {
            NondeterminedFiniteAutomaton nfa = new NondeterminedFiniteAutomaton();

            foreach (var sequence in symbolsSequence)
            {
                foreach (var symbol in sequence)
                {
                    if (!nfa.IsSymbolExist(symbol))
                    {
                        nfa.AddSymbol(symbol);
                    }
                }
            }

            for (int i = 0; i < states.Count; i++)
            {
                nfa.AddState(states[i]);
            }
            for (int j = 0; j < transitionsBySequence.Count; j++)
            {
                for (int i = 0; i < transitionsBySequence[j].Destinations.Count; i++)
                {
                    nfa.AddTransitionBySymbolsSequence(
                        transitionsBySequence[j].Source, transitionsBySequence[j].Destinations[i],
                        transitionsBySequence[j].Symbols);
                }
            }
            for (int j = 0; j < transitions.Count; j++)
            {
                for (int i = 0; i < transitions[j].Destinations.Count; i++)
                {
                    nfa.AddTransition(transitions[j].Source, transitions[j].Destinations[i],
                                      transitions[j].Symbol);
                }
            }
            nfa.SetStartStates(new HashSet <string>(startStates));
            nfa.SetFinalStates(new HashSet <string>(finalStates));
            return(nfa);
        }