Пример #1
0
        public void CompositeVisitor_CapturingGroup_SandBoxTest_PriorityChoice3()
        {
            var prefix = new PrioritizedChoice(
                new CapturingGroup("AndPredicate", new Literal {
                MatchText = "&"
            }),
                new CapturingGroup("NotPredicate", new Literal {
                MatchText = "!"
            })
                );

            PrioritizedChoice suffix = new PrioritizedChoice(
                new CapturingGroup("ZeroOrMore", new Literal {
                MatchText = "*"
            }),
                new CapturingGroup("OneOrMore", new Literal {
                MatchText = "+"
            })
                )
                                       .Or(new CapturingGroup("Optional", new Literal {
                MatchText = "?"
            }));

            var terminal = new CapturingGroup("AnyCharacter", new Literal {
                MatchText = "."
            });
            var expression = new CapturingGroup("Expression",
                                                new PrioritizedChoice(
                                                    // match prefixes first
                                                    prefix.Plus()
                                                    .Sequence(terminal)
                                                    ,
                                                    // match suffixes next
                                                    terminal
                                                    .Sequence(
                                                        suffix.Plus()
                                                        )
                                                    )
                                                .Or(terminal)
                                                .Plus()
                                                );

            var input    = ".";
            var bytes    = Encoding.UTF8.GetBytes(input);
            var iterator = new ByteInputIterator(bytes);
            var visitor  = new NpegParserVisitor(iterator);

            expression.Accept(visitor);

            Assert.IsTrue(visitor.IsMatch);
            AstNode node = visitor.AST;

            Assert.IsTrue(node.Children.Count == 1);
            Assert.IsTrue(node.Token.Name == "Expression");
            Assert.IsTrue(node.Token.ValueAsString(iterator) == ".");
            Assert.IsTrue(node.Children[0].Token.Name == "AnyCharacter");
        }