Esempio n. 1
0
 private IAutomaton Factor()
 {
     if (MayConsume('('))
     {
         var result = Exec();
         Consumes(')');
         return(result);
     }
     else if (MayConsume('['))
     {
         var negate = MayConsume('^');
         var chars  = CharSet.Empty;
         while (!MayConsume(']'))
         {
             var set = CharRange();
             chars = chars.Union(set);
         }
         if (negate)
         {
             chars = chars.Negate();
         }
         return(ConstructionKit.Consume(chars));
     }
     else
     {
         var ch = CharRange();
         return(ConstructionKit.Consume(ch));
     }
 }
Esempio n. 2
0
        public void StepConcatenation()
        {
            var A         = ConstructionKit.Consume(new CharSet('a'));
            var B         = ConstructionKit.Consume(new CharSet('b'));
            var automaton = ConstructionKit.Concat(new[] { A, B });

            automaton.Accepts("ab");
            automaton.Rejects("ba");
        }
Esempio n. 3
0
        public void StepCharacter()
        {
            var automaton = ConstructionKit.Consume(new CharSet('a', 'b', 'c'));

            automaton.Accepts("a");
            automaton.Accepts("b");
            automaton.Accepts("c");
            automaton.Rejects("d");
        }
Esempio n. 4
0
        public void StepRepetition()
        {
            var A         = ConstructionKit.Consume(new CharSet('a'));
            var automaton = ConstructionKit.Repeat(A);

            automaton.Accepts("");
            automaton.Accepts("a");
            automaton.Accepts("aa");
            automaton.Accepts("aaa");
            automaton.Rejects("b");
        }
Esempio n. 5
0
        public void StepAlternation()
        {
            var A         = ConstructionKit.Consume(new CharSet('a'));
            var B         = ConstructionKit.Consume(new CharSet('b'));
            var AA        = ConstructionKit.Concat(new[] { A, A });
            var automaton = ConstructionKit.Alternate(new[] { AA, B });

            automaton.Accepts("b");
            automaton.Accepts("aa");
            automaton.Rejects("bb");
            automaton.Rejects("a");
        }
Esempio n. 6
0
        public void StepDeterminize()
        {
            var A         = ConstructionKit.Consume(new CharSet('a'));
            var B         = ConstructionKit.Consume(new CharSet('b'));
            var AA        = ConstructionKit.Concat(new[] { A, A });
            var AAorB     = ConstructionKit.Alternate(new[] { AA, B });
            var automaton = ConstructionKit.Repeat(AAorB)
                            .Determinize();

            automaton.Accepts("");
            automaton.Accepts("aa");
            automaton.Accepts("aa");
            automaton.Accepts("aaaa");
            automaton.Accepts("baab");
            automaton.Accepts("baabaabb");
            automaton.Rejects("a");
            automaton.Rejects("aaa");
        }