/// <summary> /// bevat een even aantal b’s en eindigt op aab /// </summary> /// <returns></returns> static public Automata <string> EvenbEindigaab() { char[] alphabet = { 'a', 'b' }; Automata <string> automata = new Automata <string>(alphabet); automata.AddTransition(new Transition <string>("0", 'a', "0")); automata.AddTransition(new Transition <string>("0", 'b', "1")); automata.AddTransition(new Transition <string>("1", 'a', "2")); automata.AddTransition(new Transition <string>("1", 'b', "0")); automata.AddTransition(new Transition <string>("2", 'a', "3")); automata.AddTransition(new Transition <string>("2", 'b', "0")); automata.AddTransition(new Transition <string>("3", 'a', "2")); automata.AddTransition(new Transition <string>("3", 'b', "4")); automata.AddTransition(new Transition <string>("4", 'a', "2")); automata.AddTransition(new Transition <string>("4", 'b', "0")); automata.DefineAsStartState("0"); automata.DefineAsFinalState("4"); return(automata); }
static public Automata <string> GetExampleSlide14Lesson2() { char[] alphabet = { 'a', 'b' }; Automata <string> automata = new Automata <string>(alphabet); automata.AddTransition(new Transition <string>("A", 'a', "C")); automata.AddTransition(new Transition <string>("A", 'b', "B")); automata.AddTransition(new Transition <string>("A", 'b', "C")); automata.AddTransition(new Transition <string>("B", 'b', "C")); automata.AddTransition(new Transition <string>("B", "C")); automata.AddTransition(new Transition <string>("C", 'a', "D")); automata.AddTransition(new Transition <string>("C", 'a', "E")); automata.AddTransition(new Transition <string>("C", 'b', "D")); automata.AddTransition(new Transition <string>("D", 'a', "B")); automata.AddTransition(new Transition <string>("D", 'a', "C")); automata.AddTransition(new Transition <string>("E", 'a')); automata.AddTransition(new Transition <string>("E", "D")); // only on start state in a dfa: automata.DefineAsStartState("A"); // two final states: automata.DefineAsFinalState("C"); automata.DefineAsFinalState("E"); return(automata); }
static public Automata <string> GetExampleSlide8Lesson2() { char[] alphabet = { 'a', 'b' }; Automata <string> automata = new Automata <string>(alphabet); automata.AddTransition(new Transition <string>("q0", 'a', "q1")); automata.AddTransition(new Transition <string>("q0", 'b', "q4")); automata.AddTransition(new Transition <string>("q1", 'a', "q4")); automata.AddTransition(new Transition <string>("q1", 'b', "q2")); automata.AddTransition(new Transition <string>("q2", 'a', "q3")); automata.AddTransition(new Transition <string>("q2", 'b', "q4")); automata.AddTransition(new Transition <string>("q3", 'a', "q1")); automata.AddTransition(new Transition <string>("q3", 'b', "q2")); // the error state, loops for a and b: automata.AddTransition(new Transition <string>("q4", 'a')); automata.AddTransition(new Transition <string>("q4", 'b')); // only on start state in a dfa: automata.DefineAsStartState("q0"); // two final states: automata.DefineAsFinalState("q2"); automata.DefineAsFinalState("q3"); return(automata); }
/// <summary> /// Schrijf Automata naar een dot file voor graphviz /// </summary> /// <typeparam name="T"></typeparam> /// <param name="automata"></param> /// <param name="filename"></param> /// <param name="path">Moet eindigen op / als het geen lege string is</param> /// <param name="leftRight">default zal de graph van boven naar beneden worden getekend</param> public void WriteToDotFile <T>(Automata <T> automata, string filename, string path = "", bool leftRight = false) where T : IComparable { Dictionary <T, int> labels = new Dictionary <T, int>(); for (int i = 1; i < automata.States.Count + 1; i++) { labels.Add(automata.States.ElementAt(i - 1), i); } using (StreamWriter writer = new StreamWriter($"{path}{filename}.dot")) { writer.WriteLine("digraph dfa {"); if (leftRight) { writer.WriteLine("rankdir=LR;"); } //Labels writer.WriteLine(@"NOTHING [label="""", shape=none]"); foreach (var label in labels) { if (automata.StartStates.Contains(label.Key) && automata.FinalStates.Contains(label.Key)) { writer.WriteLine($@"{label.Value} [label=""{label.Key}"", shape=ellipse, style=filled, color=green]"); } else if (automata.StartStates.Contains(label.Key)) { writer.WriteLine($@"{label.Value} [label=""{label.Key}"", shape=ellipse, style=filled, color=lightblue]"); } else if (automata.FinalStates.Contains(label.Key)) { writer.WriteLine($@"{label.Value} [label=""{label.Key}"", shape=ellipse, style=filled, color=yellowgreen]"); } else { writer.WriteLine($@"{label.Value} [label=""{label.Key}"", shape=ellipse, style=filled]"); } } //Transitions foreach (var state in automata.StartStates) { writer.WriteLine($"NOTHING -> {labels[state]}"); } foreach (var transition in automata.Transitions) { int from = labels[transition.FromState]; int to = labels[transition.ToState]; writer.WriteLine($@"{from} -> {to} [label=""{transition.Symbol}""]"); } writer.WriteLine("}"); } }
/// <summary> /// begint met abb of eindigt op baab /// </summary> /// <returns></returns> static public Automata <string> BeginabbOfEindingbaab() { char[] alphabet = { 'a', 'b' }; Automata <string> automata = new Automata <string>(alphabet); automata.AddTransition(new Transition <string>("0", 'a', "1")); automata.AddTransition(new Transition <string>("0", 'b', "4")); automata.AddTransition(new Transition <string>("1", 'a', "4")); automata.AddTransition(new Transition <string>("1", 'b', "2")); automata.AddTransition(new Transition <string>("2", 'a', "4")); automata.AddTransition(new Transition <string>("2", 'b', "3")); automata.AddTransition(new Transition <string>("3", 'a', "3")); automata.AddTransition(new Transition <string>("3", 'b', "3")); automata.AddTransition(new Transition <string>("4", 'a', "4")); automata.AddTransition(new Transition <string>("4", 'b', "5")); automata.AddTransition(new Transition <string>("5", 'a', "6")); automata.AddTransition(new Transition <string>("5", 'b', "5")); automata.AddTransition(new Transition <string>("6", 'a', "7")); automata.AddTransition(new Transition <string>("6", 'b', "5")); automata.AddTransition(new Transition <string>("7", 'a', "4")); automata.AddTransition(new Transition <string>("7", 'b', "8")); automata.AddTransition(new Transition <string>("8", 'a', "4")); automata.AddTransition(new Transition <string>("8", 'b', "5")); automata.DefineAsStartState("0"); automata.DefineAsFinalState("3"); automata.DefineAsFinalState("8"); return(automata); }