public static void testRegularExpressionThompson2() { //This is the regular expression ( (a|b|c|d)|(ab|ad|bc) )+ (aab) (c|cad|cb)* RegularExpression exp1, exp2, exp3, exp4, a, b, c, d, ab, ad, bc, abb, cad, cb,all; a = new RegularExpression("a"); b = new RegularExpression("b"); c = new RegularExpression("c"); d = new RegularExpression("d"); ab = new RegularExpression("ab"); ad = new RegularExpression("ad"); bc = new RegularExpression("bc"); abb = new RegularExpression("abb"); cad = new RegularExpression("cad"); cb = new RegularExpression("cb"); // (a|b|c|d) exp1 = (a.or(b).or(c).or(d)); // (ab|ad|bc) exp2 = (ab.or(ad).or(bc)); // (c|cad|cb)* exp3 = (c.or(cad).or(cb).star()); // ( (a|b|c|d) | (ab|ad|bc) )+ exp4 = (exp1.or(exp2).plus()); // Merge all = exp4.dot(abb.dot(exp3)); Automata<String> auto = new Automata<String>(); int num = 0; all.regexToNDFA(ref num, ref auto); generateAutomataImage(auto); return; }
public static void testRegExpThompson() { RegularExpression exp1, exp2, exp3, exp4, exp5, a, b, c, all, why; a = new RegularExpression("a"); b = new RegularExpression("b"); c = new RegularExpression("c"); //exp 1 (baa) exp1 = new RegularExpression("baa"); //exp 2 (ac) exp2 = new RegularExpression("ac"); //exp 4 (baa)+ exp4 = exp1.plus(); //exp 5 (ac)* exp5 = exp2.star(); //exp 3 (a|b|c)* exp3 = (a.or(b).or(c)).star(); //all (a|b|c)* (baa)+ (ca)* all = exp3.dot(exp4.dot(exp5)); why = new RegularExpression("baa").plus().star().plus(); foreach (String o in all.getLanguage(5)) { Console.Write(o + " "); } Automata<String> auto = new Automata<String>(); int num = 0; why.regexToNDFA(ref num,ref auto); return; }
public static void testRegularExpression() { RegularExpression exp1, exp2, exp3, exp4, exp5, a, b, all; a = new RegularExpression("a"); b = new RegularExpression("b"); // exp 1 baa exp1 = new RegularExpression("baa"); // exp 2 bb exp2 = new RegularExpression("bb"); // exp 3 baa | bb exp3 = exp1.or(exp2); //all = (a|b)* all = (a.or(b)).star(); // exp 4 (baa | bb)+ exp4 = exp3.plus(); // exp 4 (baa | bb)+ (a|b)* exp5 = exp4.dot(all); Console.WriteLine(exp5.ToString()); #region PRINTREGULAREXPRESSION Console.WriteLine("taal van (baa):"); foreach (String o in exp1.getLanguage(5)) { Console.Write(o + " "); } Console.WriteLine(""); Console.ReadLine(); Console.WriteLine("taal van (bb):"); foreach (String o in exp2.getLanguage(5)) { Console.Write(o + " "); } Console.WriteLine(""); Console.ReadLine(); Console.WriteLine("taal van (baa | bb):"); foreach (String o in exp3.getLanguage(5)) { Console.Write(o + " "); } Console.WriteLine(""); Console.ReadLine(); Console.WriteLine("taal van (a|b)*:"); foreach (String o in all.getLanguage(5)) { Console.Write(o + " "); } Console.WriteLine(""); Console.ReadLine(); Console.WriteLine("taal van (baa | bb)+:"); foreach (String o in exp5.getLanguage(5)) { Console.Write(o + " "); } Console.WriteLine(""); Console.ReadLine(); Console.WriteLine("taal van (baa | bb)+ (a|b)*:"); foreach (String o in exp5.getLanguage(6)) { Console.Write(o + " "); } Console.WriteLine(""); Console.ReadLine(); #endregion }
public static RegularExpression generateRandomRegex(char[] alfabet, int depth=5) { bool wasmulti = false; RegularExpression begin = new RegularExpression("a"); for (int c = 0; c < depth; c++) { int type; if (wasmulti) type = r.Next(1, 2); else type = r.Next(1, 4); wasmulti = false; switch (type) { case 1: //ONE & DOT string terminal = ""; for (int i = 0; i < r.Next(1, 5); i++) { terminal = terminal + alfabet[r.Next(0, alfabet.Count())]; } begin = begin.dot(new RegularExpression(terminal)); break; case 2: //ONE & OR terminal = ""; for (int i = 0; i < r.Next(1, 5); i++) { terminal = terminal + alfabet[r.Next(0, alfabet.Count())]; } begin = begin.or(new RegularExpression(terminal)); break; case 3: //PLUS begin = begin.plus(); wasmulti = true; break; case 4: //STAR begin = begin.star(); wasmulti = true; break; } } return begin; }