Beispiel #1
0
        public void NonTerminal_Predicate_And()
        {
            // predicates should not adjust the
            // iterator once the expression is evaluated.
            AExpression Digit = new CharacterClass {ClassExpression = "[0-9]"};

            // regex expression: \d+
            var input = Encoding.UTF8.GetBytes("01234567890123456789");
            var iterator = new ByteInputIterator(input);
            AExpression andPredicate = new OneOrMore(Digit).And();
            var visitor = new NpegParserVisitor(iterator);
            andPredicate.Accept(visitor);
            Assert.IsTrue(visitor.IsMatch);
            Assert.IsTrue(iterator.Index == 0);
        }
Beispiel #2
0
        public void NonTerminal_Predicate_Or()
        {
            // predicates should not adjust the
            // iterator once the expression is evaluated.
            AExpression Digit = new CharacterClass {ClassExpression = "[0-9]"};

            // equivalent to: regex '^' '$'
            // regex expression: ^\d+$
            var bytes = Encoding.UTF8.GetBytes("0123456abcdefg");
            var iterator = new ByteInputIterator(bytes);
            AExpression notPredicate = new OneOrMore(Digit).And().Sequence(new NotPredicate(new AnyCharacter()));
            var visitor = new NpegParserVisitor(iterator);
            notPredicate.Accept(visitor);
            Assert.IsFalse(visitor.IsMatch); // should fail
            Assert.IsTrue(iterator.Index == 0);
        }