Exemple #1
0
        public void Compile_WhenEmptyParensAreIncluded_CompilesCorrectly()
        {
            var grammar = new PegParser().Parse("a = () b; b = 'OK';");

            var compiled = PegCompiler.Compile(grammar);
            var parser   = CodeCompiler.Compile <string>(compiled);

            Assert.That(parser.Parse("OK"), Is.EqualTo("OK"));
        }
Exemple #2
0
        public void Parse_WhenARepetitionDelimiterFollowsTheRepeatedRule_DoesNotConsumeTheDelimiter()
        {
            var grammar = new PegParser().Parse("start = ' ' 'hoge'<1,,' '> ' ';");

            var compiled = PegCompiler.Compile(grammar);
            var parser   = CodeCompiler.Compile <string>(compiled);

            Assert.That(parser.Parse(" hoge "), Is.EqualTo(" hoge "));
        }
Exemple #3
0
        public void Compile_WhenRuleNameIsAReservedWord_CompilesCorrectly(string grammarText)
        {
            var grammar = new PegParser().Parse(grammarText);

            var compiled = PegCompiler.Compile(grammar);
            var parser   = CodeCompiler.Compile <string>(compiled);

            Assert.That(parser.Parse("OK"), Is.EqualTo("OK"));
        }
Exemple #4
0
        public void Parse_WhenUsingLojbhan_DoesntTimeOut(string subject)
        {
            var parserSource = File.ReadAllText(@"TestCases\LojbanGrammar.peg");
            var grammar      = new PegParser().Parse(parserSource, @"TestCases\LojbanGrammar.peg");
            var compiled     = PegCompiler.Compile(grammar);
            var parser       = CodeCompiler.Compile <object>(compiled);

            Assert.That(parser.Parse(subject), Is.EqualTo(subject));

            Evaluate(() =>
            {
                var x = parser.Parse(subject);
            });
        }
Exemple #5
0
        public void Compile_WhenMemoizedRuleIsVisitedAfterAMutation_DoesNotUseTheMemoizedValue()
        {
            var grammar = new PegParser().Parse(StringUtilities.JoinLines(
                                                    "@members",
                                                    "{",
                                                    "    private int callCount = 0;",
                                                    "}",
                                                    "start <int>",
                                                    "  = 'OK'                                     t:test 'NO' { t }",
                                                    "  / 'OK' #{ state[\"foo\"] = \"bar\"; } t:test      { t }",
                                                    "test <int> -memoize = { ++callCount }"));

            var compiled = PegCompiler.Compile(grammar);
            var parser   = CodeCompiler.Compile <int>(compiled);

            Assert.That(parser.Parse("OK"), Is.EqualTo(2));
        }
Exemple #6
0
        public void Compile_WhenMemoizedRuleIsReVisitedWithoutStateMutation_UsesTheMemoizedValue()
        {
            var grammar = new PegParser().Parse(StringUtilities.JoinLines(
                                                    "@members",
                                                    "{",
                                                    "    private int callCount = 0;",
                                                    "}",
                                                    "start <int>",
                                                    "  = 'OK'           t:test 'NO' { t }",
                                                    "  / 'OK' #{ } t:test      { t }",
                                                    "test <int> -memoize = { ++callCount }"));

            var compiled = PegCompiler.Compile(grammar);
            var parser   = CodeCompiler.Compile <int>(compiled);

            Assert.That(parser.Parse("OK"), Is.EqualTo(1));
        }