Esempio n. 1
0
        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");
            }
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
        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);
        }