Beispiel #1
0
        private static void GramToNdfaAndReverse()
        {
            char[] alphabet = { 'a', 'b' };
            var    ndfa     = new Automaat <int>(alphabet);

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

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

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

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

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

            ndfa.DefineAsStartState(0);

            ndfa.DefineAsFinalState(2);
            ndfa.DefineAsFinalState(4);

            Graphviz.PrintGraph(ndfa, "ndfaToGram");

            var gram = RegGram <int> .NdfaToRegGram(ndfa);

            Console.WriteLine(gram.ToString());
        }
            private void HandleSubInput(int index)
            {
                var running  = true;
                var automaat = automates[index].automaat;

                while (running)
                {
                    Console.Clear();
                    Console.WriteLine($"Gekozen {automates[index].text}");
                    subsubtext.ToList().ForEach(s => Console.WriteLine(s));
                    int input = GetInput(subsubtext.Length);
                    switch (input)
                    {
                    case 0:
                        Graphviz.PrintGraph(automaat, "test");
                        break;

                    case 1:
                        var gram = RegGram <int> .NdfaToRegGram(automaat);

                        Console.WriteLine(gram.ToString());
                        Console.ReadLine();
                        break;

                    case 2:
                        running = false;
                        automates.Clear();
                        break;
                    }
                }
            }
Beispiel #3
0
        public void ViewImage(string filename)
        {
            var isEmptyNullOrWhiteSpace = string.IsNullOrWhiteSpace(filename) || string.IsNullOrEmpty(filename);

            filename = !isEmptyNullOrWhiteSpace ? filename : "Automaat_picture";

            Graphviz.PrintGraph(this, filename);
        }
Beispiel #4
0
        public void ViewImage(bool minimizedDFA)
        {
            var a = Thompson.CreateAutomaat(this);

            if (minimizedDFA)
            {
                Graphviz.PrintGraph(NdfatoDfa.MakeDfa(a).MinimizeReverse(), "test");
            }
            else
            {
                Graphviz.PrintGraph(a, "test");
            }
        }
            private void HandleSubInput(AutomateStruct automate)
            {
                var  dfa     = NdfatoDfa.MakeDfa(automate.automaat);
                bool running = true;

                while (running)
                {
                    Console.Clear();
                    Console.WriteLine($"gekozen: {automate.text} \n");
                    subsubtext.ToList().ForEach(s => Console.WriteLine(s));

                    int input = GetInput(subsubtext.Length);

                    switch (input)
                    {
                    case 0:
                        Graphviz.PrintGraph(automate.automaat, "test");
                        break;

                    case 1:
                        Graphviz.PrintGraph(dfa, "test");
                        break;

                    case 2:
                        Graphviz.PrintGraph(dfa.MinimizeHopCroft(false), "test");
                        break;

                    case 3:
                        Console.WriteLine($"typ woord: \ntoegestane symbolen: ");
                        automate.automaat._symbols.ToList().ForEach(c => Console.WriteLine(c));
                        var woord = Console.ReadLine();
                        if (NdfatoDfa.MakeDfa(automate.automaat).Accepteer(woord))
                        {
                            Console.WriteLine("Het ingevoerde woord wordt geaccepteerd door het automaat");
                        }
                        else
                        {
                            Console.WriteLine("Het ingevoerde woord wordt niet geaccepteerd door het automaat");
                        }
                        Console.ReadLine();
                        break;

                    case 4:
                        running = false;
                        automates.Clear();
                        break;
                    }
                }
            }
Beispiel #6
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);
        }
Beispiel #7
0
        private static void TestNdfaGraphviz()
        {
            var ndfa = new Automaat <string>(Alphabet);

            ndfa.AddTransition(new Transition <string>("0", Alphabet[0], "0"));
            ndfa.AddTransition(new Transition <string>("0", Alphabet[0], "1"));
            ndfa.AddTransition(new Transition <string>("0", Alphabet[1], "3"));

            ndfa.AddTransition(new Transition <string>("1", Alphabet[0], "1"));
            ndfa.AddTransition(new Transition <string>("1", Alphabet[1], "2"));

            ndfa.AddTransition(new Transition <string>("3", Alphabet[0]));
            ndfa.AddTransition(new Transition <string>("3", Alphabet[1]));

            ndfa.AddTransition(new Transition <string>("4", Alphabet[0], "1"));
            ndfa.AddTransition(new Transition <string>("4", Alphabet[1]));

            ndfa.DefineAsStartState("0");
            ndfa.DefineAsStartState("4");

            ndfa.DefineAsFinalState("2");

            Graphviz.PrintGraph(ndfa, "ndfaTest");
        }
Beispiel #8
0
        static void NdfaToDfa()
        {
            char[] alphabet = { 'a', 'b' };
            var    m        = new Automaat <int>(alphabet);

            m.AddTransition(new Transition <int>(0, Transition <int> .Epsilon, 1));
            m.AddTransition(new Transition <int>(0, Transition <int> .Epsilon, 7));

            m.AddTransition(new Transition <int>(1, Transition <int> .Epsilon, 2));
            m.AddTransition(new Transition <int>(1, Transition <int> .Epsilon, 4));

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

            m.AddTransition(new Transition <int>(3, Transition <int> .Epsilon, 6));

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

            m.AddTransition(new Transition <int>(5, Transition <int> .Epsilon, 6));

            m.AddTransition(new Transition <int>(6, Transition <int> .Epsilon, 7));
            m.AddTransition(new Transition <int>(6, Transition <int> .Epsilon, 1));

            m.AddTransition(new Transition <int>(7, alphabet[0], 8));

            m.AddTransition(new Transition <int>(8, alphabet[1], 9));

            m.AddTransition(new Transition <int>(9, alphabet[1], 10));

            m.DefineAsStartState(0);
            m.DefineAsFinalState(10);

            var dfa = NdfatoDfa.MakeDfa(m);

            Graphviz.PrintGraph(m, "test");
            dfa.PrintTransitions();
        }
Beispiel #9
0
        private static void TestGenerateAutomaat()
        {
            var a = AutomaatGenerator.GenerateAutomaat("bbab", Alphabet, AutomaatGenerator.AutomaatType.BEGINT_MET);

            var testWords = new List <Tuple <string, bool> >
            {
                new Tuple <string, bool>("bbab", true),
                new Tuple <string, bool>("bbbab", false),
                new Tuple <string, bool>("babb", false),
                new Tuple <string, bool>("bbaba", true),
                new Tuple <string, bool>("bbabb", true)
            };

            //TestingAutomaat("Begint met bbab", a, testWords);
            //Graphviz.PrintGraph(a, "begintmettest");

            a = AutomaatGenerator.GenerateAutomaat("aba", Alphabet, AutomaatGenerator.AutomaatType.BEVAT);

            testWords = new List <Tuple <string, bool> >
            {
                new Tuple <string, bool>("bbab", true),
                new Tuple <string, bool>("bbbab", false),
                new Tuple <string, bool>("babb", false),
                new Tuple <string, bool>("bbaba", true),
                new Tuple <string, bool>("bbabb", false)
            };

            //TestingAutomaat("Bevat aba", a, testWords);
            //Graphviz.PrintGraph(a, "bevat aba");

            a = AutomaatGenerator.GenerateAutomaat("aa", Alphabet, AutomaatGenerator.AutomaatType.BEVAT);

            testWords = new List <Tuple <string, bool> >
            {
                new Tuple <string, bool>("bbaa", true),
                new Tuple <string, bool>("abaa", true),
                new Tuple <string, bool>("abab", false),
                new Tuple <string, bool>("bbabab", false),
                new Tuple <string, bool>("bbaabaa", true)
            };

            //TestingAutomaat("Bevat aa", a, testWords);
            //Graphviz.PrintGraph(a, "bevat aa");

            a = AutomaatGenerator.GenerateAutomaat("baba", Alphabet, AutomaatGenerator.AutomaatType.BEVAT);

            testWords = new List <Tuple <string, bool> >
            {
                new Tuple <string, bool>("aaababaab", true),
                new Tuple <string, bool>("abab", false),
                new Tuple <string, bool>("aabab", false),
                new Tuple <string, bool>("baba", true),
                new Tuple <string, bool>("bbaaba", false)
            };

            //TestingAutomaat("Bevat baba", a, testWords);
            //Graphviz.PrintGraph(a, "bevat baba");

            a = AutomaatGenerator.GenerateAutomaat("baab", Alphabet, AutomaatGenerator.AutomaatType.EINDIGT_OP);

            testWords = new List <Tuple <string, bool> >
            {
                new Tuple <string, bool>("baab", true),
                new Tuple <string, bool>("baaabaab", true),
                new Tuple <string, bool>("baaba", false),
                new Tuple <string, bool>("baabb", false),
                new Tuple <string, bool>("baabaab", true),
                new Tuple <string, bool>("baabaa", false)
            };

            TestingAutomaat("eindigt op baab", a, testWords);
            Graphviz.PrintGraph(a, "eindigt op baab");

            a = a.MinimizeReverse();

            TestingAutomaat("eindigt op baab (minimized)", a, testWords);
            Graphviz.PrintGraph(a, "eindigt op baab (minimized)");
        }