Beispiel #1
0
 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));
 }
Beispiel #2
0
        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);
        }