public void Terminal_Any()
        {
            var         input    = "ijk";
            var         bytes    = Encoding.UTF8.GetBytes(input);
            var         iterator = new ByteInputIterator(bytes);
            AExpression any      = new Sequence(new AnyCharacter(), new AnyCharacter());
            var         visitor  = new NpegParserVisitor(iterator);

            any.Accept(visitor);
            Assert.IsTrue(visitor.IsMatch);
            Assert.IsTrue(iterator.Index == 2,
                          "Expected two characters to be consumed and Iterator updated by 2.  0, 1 .. points to 2");

            input    = "ij";
            bytes    = Encoding.UTF8.GetBytes(input);
            iterator = new ByteInputIterator(bytes);
            visitor  = new NpegParserVisitor(iterator);
            any.Accept(visitor);
            Assert.IsTrue(visitor.IsMatch);
            Assert.IsTrue(iterator.Index == 2,
                          "Expected two characters to be consumed and Iterator updated by 2.  0, 1 .. points to 2");

            input    = "";
            bytes    = Encoding.UTF8.GetBytes(input);
            iterator = new ByteInputIterator(bytes);
            any      = new AnyCharacter();
            visitor  = new NpegParserVisitor(iterator);
            any.Accept(visitor);
            Assert.IsFalse(visitor.IsMatch);
            Assert.IsTrue(iterator.Index == 0, "Expected no characters to be consumed and index stay at zero.");

            var number = new Sequence(
                new OneOrMore(new CharacterClass {
                ClassExpression = "[0-9]"
            }),
                new NotPredicate(
                    new AnyCharacter()
                    )
                );

            input    = "012345.";
            bytes    = Encoding.UTF8.GetBytes(input);
            iterator = new ByteInputIterator(bytes);
            visitor  = new NpegParserVisitor(iterator);
            number.Accept(visitor);
            Assert.IsFalse(visitor.IsMatch);
        }
Beispiel #2
0
        public IProgram Visit(Sequence program)
        {
            IList <IProgram> instructions = program.Accept(new InstructionList());

            return(IProgram.MakeSequence(instructions));
        }