private static void TestRegex(RegExp reg) { Console.WriteLine($"\n{reg.ToString()}"); var automaat = Thompson.CreateAutomaat(reg); automaat.PrintTransitions(); Console.WriteLine("alphabet:"); foreach (var s in automaat.GetAlphabet()) { Console.WriteLine(s); } Console.WriteLine("\ntalen die regex accepteert"); foreach (var s in reg.getLanguage(3)) { Console.WriteLine($"Taal:{s}, wordt geaccepteerd:{automaat.Accepteer(s)}\n"); } }
static void TestRegToDfa() { //reg: a|b var reg = new RegExp("a").or(new RegExp("b")); reg = reg.star(); Console.WriteLine(reg.ToString()); var ndfa = Thompson.CreateAutomaat(reg); var dfa = NdfatoDfa.MakeDfa(ndfa); dfa.PrintTransitions(); Console.WriteLine("reversed dfa"); var reversedDfa = dfa.Reverse(); reversedDfa.PrintTransitions(); }
public override string ToString() { string leftS = "", rightS = "", regS = ""; if (left != null) { leftS = left.ToString(); } if (right != null) { rightS = right.ToString(); } switch (_operator) { case Operator.PLUS: regS = $"{leftS}+"; break; case Operator.STAR: regS = $"{leftS}*"; break; case Operator.OR: regS = $"({leftS}|{rightS})"; break; case Operator.DOT: regS = $"({leftS}.{rightS})"; break; case Operator.ONE: regS = terminals; break; default: throw new ArgumentOutOfRangeException(); } return(regS); }