示例#1
0
            private void HandleSubMenu(int index, Automaat <int> automaat)
            {
                switch (index)
                {
                case 0:
                    automaat.ViewImage();
                    break;

                case 1:
                    NdfatoDfa.MakeDfa(automaat).ViewImage();
                    break;

                case 2:
                    automaat.MinimizeHopCroft(false).ViewImage();
                    break;

                case 3:
                    automaat.GeefTaal(5).ForEach(s => Console.WriteLine(s));
                    Console.ReadLine();
                    break;

                case 4:
                    automaat.GeefNietTaal(5).ForEach(s => Console.WriteLine(s));
                    Console.ReadLine();
                    break;
                }
            }
示例#2
0
        static void PracL1Representatie2()
        {
            char[]            alphabet = { 'a', 'b' };
            Automaat <string> m        = new Automaat <string>(alphabet);

            m.AddTransition(new Transition <string>("1", alphabet[0], "2"));
            m.AddTransition(new Transition <string>("1", alphabet[1], "3"));

            m.AddTransition(new Transition <string>("2", alphabet[0], "1"));
            m.AddTransition(new Transition <string>("2", alphabet[1], "5"));

            m.AddTransition(new Transition <string>("3", alphabet[0], "2"));
            m.AddTransition(new Transition <string>("3", alphabet[1], "4"));

            m.AddTransition(new Transition <string>("4", alphabet[0], "2"));
            m.AddTransition(new Transition <string>("4", alphabet[1], "4"));

            m.AddTransition(new Transition <string>("5", alphabet[0], "1"));
            m.AddTransition(new Transition <string>("5", alphabet[1], "4"));

            // only on start state in a dfa:
            m.DefineAsStartState("1");

            // two final states:
            m.DefineAsFinalState("2");
            m.DefineAsFinalState("4");
            m.DefineAsFinalState("5");

            List <Tuple <string, bool> > testWords = new List <Tuple <string, bool> >();

            testWords.Add(new Tuple <string, bool>("a", true));
            testWords.Add(new Tuple <string, bool>("bb", true));
            testWords.Add(new Tuple <string, bool>("abb", true));
            testWords.Add(new Tuple <string, bool>("aabb", true));
            testWords.Add(new Tuple <string, bool>("baa", false));
            testWords.Add(new Tuple <string, bool>("aabbabaaabab", true));
            testWords.Add(new Tuple <string, bool>("ababaabaa", false));
            testWords.Add(new Tuple <string, bool>("abba", true));
            testWords.Add(new Tuple <string, bool>("babab", false));
            testWords.Add(new Tuple <string, bool>("ababa", true));
            TestingAutomaat("Bevat een even aantal b’s of bevat een oneven aantal a’s", m, testWords);
            var a = m.GeefTaal(3);

            Console.WriteLine("geaccepteerde woorden:");
            a.ForEach(word => Console.WriteLine("\t" + word));
            var b = m.GeefNietTaal(3);

            Console.WriteLine("niew geaccepteerde woorden:");
            b.ForEach(word => Console.WriteLine("\t" + word));
        }
示例#3
0
        static void TestSamenvoegen()
        {
            char[] alphabet = { 'a', 'b' };
            var    dfa1     = new Automaat <int>(alphabet);

            dfa1.AddTransition(new Transition <int>(1, alphabet[0], 2));
            dfa1.AddTransition(new Transition <int>(1, alphabet[1], 1));

            dfa1.AddTransition(new Transition <int>(2, alphabet[0], 1));
            dfa1.AddTransition(new Transition <int>(2, alphabet[1], 2));

            dfa1.DefineAsStartState(1);
            dfa1.DefineAsFinalState(1);

            var dfa2 = new Automaat <int>(alphabet);

            dfa2.AddTransition(new Transition <int>(1, alphabet[0], 1));
            dfa2.AddTransition(new Transition <int>(1, alphabet[1], 2));

            dfa2.AddTransition(new Transition <int>(2, alphabet[0], 1));
            dfa2.AddTransition(new Transition <int>(2, alphabet[1], 3));

            dfa2.AddTransition(new Transition <int>(3, alphabet[0], 1));
            dfa2.AddTransition(new Transition <int>(3, alphabet[1], 4));

            dfa2.AddTransition(new Transition <int>(4, alphabet[0], 4));
            dfa2.AddTransition(new Transition <int>(4, alphabet[1], 4));

            dfa2.DefineAsStartState(1);

            dfa2.DefineAsFinalState(1);
            dfa2.DefineAsFinalState(2);

            var notDfa1 = !dfa1;
            var notDfa2 = !dfa2;

            var and = dfa1 & dfa2;
            var or  = dfa1 | dfa2;

            Graphviz.PrintGraph(and, "and");

            var testWords = new List <Tuple <string, bool> >();

            dfa1.GeefTaal(4).ForEach(s => testWords.Add(new Tuple <string, bool>(s, true)));
            dfa2.GeefTaal(4).ForEach(s => testWords.Add(new Tuple <string, bool>(s, true)));

            TestingAutomaat("And dfa", and, testWords);
            TestingAutomaat("Or dfa", or, testWords);
        }