Beispiel #1
0
        static void Main(string[] args)
        {
            //DFARulebook rulebook = new DFARulebook();
            //rulebook.AddRule(2, 'b', 3);
            //rulebook.AddRule(2, 'a', 3);
            //rulebook.AddRule(1, 'b', 1);
            //rulebook.AddRule(1, 'a', 1);
            //rulebook.AddRule(1, 'b', 2);
            //rulebook.AddRule(3, 'a', 4);
            //rulebook.AddRule(3, 'b', 4);

            List <int> startState = new List <int>();

            startState.Add(1);
            //List<int> state = new List<int>();
            //state.Add(4);
            //NFA dfa = new NFA(startState, state, rulebook);
            //dfa.ReadString("bbabb");
            //if (dfa.Accepting())
            //{
            //    Console.WriteLine("True");
            //    Console.ReadLine();
            //}
            //else
            //{
            //    Console.WriteLine("False");
            //    Console.ReadLine();
            //}

            string      alphabet = "абвгдеёжзийклмнопрстуфхцчшщъэьэюя";
            DFARulebook alfbook  = new DFARulebook();

            alfbook.AddRule(1, 'a', 2);
            alfbook.AddRule(1, 'о', 2);
            alfbook.AddRule(1, 'и', 2);
            alfbook.AddRule(1, 'е', 3);
            foreach (char c in alphabet)
            {
                alfbook.AddRule(1, c, 1);
            }
            List <int> stateEnd = new List <int>();

            stateEnd.Add(3);
            NFA           alfNfa = new NFA(startState, stateEnd, alfbook);
            List <string> words  = new List <string>();

            words.Add("большое");
            words.Add("тигр");
            words.Add("большие");
            words.Add("серый");
            words.Add("урожае");
            alfNfa.CheckAndPrintWords(words);
        }
Beispiel #2
0
        public void CheckAndPrintWords(List <string> words)
        {
            List <int> start = new List <int>();

            start.Add(1);
            foreach (string word in words)
            {
                NFA newNFA = new NFA(start, AcceptStates, Rulebook);
                newNFA.ReadString(word);
                if (newNFA.Accepting())
                {
                    Console.WriteLine(word);
                }
            }
        }
Beispiel #3
0
        static void BinaryMachine()
        {
            var binaryMachine = new NFA()
            {
                q0 = State.q0,
                F  = new Tập_Hợp <State>()
                {
                    State.q2, State.q4
                },
            };

            binaryMachine.delta = (q, c) =>
            {
                var Q = new Tập_Hợp <State>();
                switch (q)
                {
                case State.q0:
                    if (c == '0')
                    {
                        return new Tập_Hợp <State> {
                                   State.q0, State.q3
                        }
                    }
                    ;
                    else
                    {
                        return new Tập_Hợp <State>()
                               {
                                   State.q0, State.q1
                               }
                    };

                case State.q1:
                    if (c == '0')
                    {
                        return new Tập_Hợp <State> {
                        }
                    }
                    ;
                    else
                    {
                        return new Tập_Hợp <State> {
                                   State.q2
                        }
                    };

                case State.q2:
                    if (c == '0')
                    {
                        return new Tập_Hợp <State> {
                                   State.q2
                        }
                    }
                    ;
                    else
                    {
                        return new Tập_Hợp <State> {
                                   State.q2
                        }
                    };

                case State.q3:
                    if (c == '0')
                    {
                        return new Tập_Hợp <State> {
                                   State.q4
                        }
                    }
                    ;
                    else
                    {
                        return new Tập_Hợp <State> {
                        }
                    };

                case State.q4:
                    if (c == '0')
                    {
                        return new Tập_Hợp <State> {
                                   State.q4
                        }
                    }
                    ;
                    else
                    {
                        return new Tập_Hợp <State> {
                                   State.q4
                        }
                    };

                default:
                    break;
                }
                return(Q);
            };

            var s1 = "01";
            var s2 = "01001";

            Console.WriteLine("Accept : " + s1 + " --> " + binaryMachine.Accept(s1));
            Console.WriteLine("--------------");
            Console.WriteLine("Accept : " + s2 + " --> " + binaryMachine.Accept(s2));
            Console.ReadKey();
        }