public static void TestLanguage() { TestRegExp(); Console.WriteLine("taal van (baa):\n"); RegExp.PrintLanguage(expr1.GetLanguage(5)); Console.WriteLine("taal van (bb):\n"); RegExp.PrintLanguage(expr2.GetLanguage(5)); Console.WriteLine("taal van (baa | bb):\n"); RegExp.PrintLanguage(expr3.GetLanguage(5)); Console.WriteLine("taal van (a|b)*:\n"); RegExp.PrintLanguage(all.GetLanguage(5)); Console.WriteLine("taal van (baa | bb)+:\n"); RegExp.PrintLanguage(expr4.GetLanguage(5)); Console.WriteLine("taal van (baa | bb)+ (a|b)*:\n"); RegExp.PrintLanguage(expr5.GetLanguage(5)); }
public SortedSet <string> GetLanguage(int maxSteps) { SortedSet <string> emptyLanguage = new SortedSet <string>(new RegExpComparator()); SortedSet <string> languageResult = new SortedSet <string>(new RegExpComparator()); SortedSet <string> languageLeft, languageRight; if (maxSteps < 1) { return(emptyLanguage); } switch (Operator) { case Operator.One: languageResult.Add(Terminals); break; case Operator.Star: case Operator.Plus: languageLeft = left == null ? emptyLanguage : left.GetLanguage(maxSteps - 1); languageResult.UnionWith(languageLeft); for (int i = 1; i < maxSteps; i++) { HashSet <String> languageTemp = new HashSet <String>(languageResult); foreach (String s1 in languageLeft) { foreach (String s2 in languageTemp) { languageResult.Add(s1 + s2); } } } if (Operator == Operator.Star) { languageResult.Add(""); } break; case Operator.Or: languageLeft = left == null ? emptyLanguage : left.GetLanguage(maxSteps - 1); languageRight = right == null ? emptyLanguage : right.GetLanguage(maxSteps - 1); languageResult.UnionWith(languageLeft); languageResult.UnionWith(languageRight); break; case Operator.Dot: languageLeft = left == null ? emptyLanguage : left.GetLanguage(maxSteps - 1); languageRight = right == null ? emptyLanguage : right.GetLanguage(maxSteps - 1); foreach (string s1 in languageLeft) { foreach (string s2 in languageRight) { languageResult.Add(s1 + s2); } } break; default: Console.WriteLine("getLanguage is nog niet gedefinieerd voor de operator: " + Operator); break; } return(languageResult); }