Example #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);
        }
Example #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);
        }
Example #3
0
		public override void VisitLeave(OneOrMore expression)
		{
			IsMatchPredicate local = _matchStack.Pop();
			_matchStack.Push(
				delegate(IInputIterator iterator)
				{
					Int32 cnt = 0;
					Int32 savePosition = iterator.Index;
					while (local(iterator))
					{
						cnt++;
						if (savePosition == iterator.Index)
						{
							//InfiniteLoopDetectedException
							break;
						}
						savePosition = iterator.Index;
					}

					iterator.Index = savePosition;

					return (cnt > 0);
				}
				);
		}
Example #4
0
		public override void VisitExecute(OneOrMore expression)
		{
		}
Example #5
0
		public override void VisitEnter(OneOrMore expression)
		{
		}
Example #6
0
		public override void VisitLeave(OneOrMore expression)
		{
			terminal.Peek().Append(")+");
		}
Example #7
0
		public override void VisitEnter(OneOrMore expression)
		{
			terminal.Peek().Append("(");
		}
Example #8
0
 public abstract void VisitEnter(OneOrMore expression);
Example #9
0
 public abstract void VisitLeave(OneOrMore expression);
Example #10
0
 public abstract void VisitExecute(OneOrMore expression);