public void and() { DFA <String, char> dfa = new DFA <String, char>(new char[] { 'a', 'b' }, "LR_X"); dfa.AddTransition("LR_0", "LR_1", 'a'); dfa.AddTransition("LR_0", "LR_2", 'b'); dfa.AddTransition("LR_1", "LR_0", 'a'); dfa.AddTransition("LR_1", "LR_1", 'b'); dfa.AddTransition("LR_2", "LR_0", 'a'); dfa.AddTransition("LR_2", "LR_2", 'b'); dfa.StartState = "LR_0"; dfa.EndStates.Add("LR_1"); dfa.EndStates.Add("LR_2"); dfa.MakePngFile("dfa.png"); Console.WriteLine(dfa.ToString()); Console.WriteLine(""); // DFA 2 DFA <String, char> dfa2 = new DFA <String, char>(dfa.Alphabet, "LR_X"); dfa2.AddTransition("LR_0", "LR_1", 'a'); dfa2.AddTransition("LR_0", "LR_X", 'b'); dfa2.AddTransition("LR_1", "LR_X", 'a'); dfa2.AddTransition("LR_1", "LR_2", 'b'); dfa2.AddTransition("LR_2", "LR_3", 'a'); dfa2.AddTransition("LR_2", "LR_X", 'b'); dfa2.AddTransition("LR_3", "LR_3", 'a'); dfa2.AddTransition("LR_3", "LR_3", 'b'); dfa2.AddTransition("LR_X", "LR_X", 'a'); dfa2.AddTransition("LR_X", "LR_X", 'b'); dfa2.StartState = "LR_0"; dfa2.EndStates.Add("LR_3"); dfa2.MakePngFile("dfa2.png"); Console.WriteLine(dfa2.ToString()); Console.WriteLine(""); // AND dfa.And(dfa2); dfa.MakePngFile("dfaAnddfa2.png"); Console.WriteLine(dfa.ToString()); Console.WriteLine(""); }
public void minimalize() { // DFA 1 DFA <String, char> dfa = new DFA <String, char>(new char[] { 'a', 'b' }, "LR_X"); dfa.AddTransition("LR_0", "LR_1", 'a'); dfa.AddTransition("LR_0", "LR_2", 'b'); dfa.AddTransition("LR_1", "LR_0", 'a'); dfa.AddTransition("LR_1", "LR_1", 'b'); dfa.AddTransition("LR_2", "LR_0", 'a'); dfa.AddTransition("LR_2", "LR_2", 'b'); dfa.StartState = "LR_0"; dfa.EndStates.Add("LR_1"); dfa.EndStates.Add("LR_2"); dfa.MakePngFile("dfa.png"); Console.WriteLine(dfa.ToString()); Console.WriteLine(""); // Minimalise dfa.MinimaliseDFA(); dfa.MakePngFile("dfaM.png"); Console.WriteLine(dfa.ToString()); Console.WriteLine(""); }
private DFA <string, char> getDFA() { DFA <string, char> dfa = new DFA <string, char>(this.alphabetSource.GetTableArray(), "LR_x"); foreach (DataGridViewRow dataRow in this.dgvTransitions.Rows) { if (dataRow.Cells[2].Value == null || dataRow.Cells[2].Value.ToString() == "") { continue; } string from = dataRow.Cells[0].Value.ToString(); string to = dataRow.Cells[1].Value.ToString(); char symbol = dataRow.Cells[2].Value.ToString().First(); dfa.AddTransition(from, to, symbol); } foreach (DataGridViewRow dataRow in this.dgvStates.Rows) { if (dataRow.Cells[0].Value == null || dataRow.Cells[0].Value.ToString() == "") { continue; } string name = dataRow.Cells[0].Value.ToString(); bool startState = (((dataRow.Cells[1]).Value == null) ? false : (bool)(dataRow.Cells[1]).Value); bool endState = (((dataRow.Cells[2]).Value == null) ? false : (bool)(dataRow.Cells[2]).Value); if (startState) { dfa.StartState = name; } if (endState) { dfa.EndStates.Add(name); } } if (!dfa.IsMachineValid()) { MessageBox.Show("Machine is not valid", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return(null); } tsbVerifyLanguage.Enabled = true; tsbToMinimalDFA.Enabled = true; //tsbToNot.Enabled = true; tsbToPng.Enabled = true; tsbToRegram.Enabled = true; return(dfa); }
public void hcVoorbeeld() { DFA <String, char> dfa = new DFA <String, char>(new char[] { 'a', 'b' }, "LR_X"); dfa.AddTransition("LR_0", "LR_1", 'a'); dfa.AddTransition("LR_0", "LR_2", 'b'); dfa.AddTransition("LR_1", "LR_0", 'a'); dfa.AddTransition("LR_1", "LR_1", 'b'); dfa.AddTransition("LR_2", "LR_0", 'a'); dfa.AddTransition("LR_2", "LR_2", 'b'); dfa.StartState = "LR_0"; dfa.EndStates.Add("LR_1"); dfa.EndStates.Add("LR_2"); dfa.MakePngFile("dfa.png"); Console.WriteLine(dfa.ToString()); Console.WriteLine(""); Regex <String> regex = new Regex <string>(new char[] { 'a', 'b' }, "a+(ab|ba)*bab", new StringStateCreater("LR_")); Console.WriteLine(regex.ToString()); Console.WriteLine(""); }