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; } } }
public void ViewImage(string filename) { var isEmptyNullOrWhiteSpace = string.IsNullOrWhiteSpace(filename) || string.IsNullOrEmpty(filename); filename = !isEmptyNullOrWhiteSpace ? filename : "Automaat_picture"; Graphviz.PrintGraph(this, filename); }
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; } } }
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); }
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"); }
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(); }
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)"); }