Exemplo n.º 1
0
        public void Parse_WithNoRules_YieldsEmptyGrammar()
        {
            var subject = string.Empty;
            var parser = new PegParser();

            var grammar = parser.Parse(subject);

            Assert.That(grammar.Rules, Is.Empty);
        }
Exemplo n.º 2
0
        public void Parse_WithLiteralExpression_YieldsLiteralExpressionWithCorrectCaseSensitivity(string subject, bool ignoreCase)
        {
            var parser = new PegParser();

            var grammar = parser.Parse(subject);
            var literal = (LiteralExpression)grammar.Rules.Single().Expression;

            Assert.That(literal.IgnoreCase, Is.EqualTo(ignoreCase));
        }
Exemplo n.º 3
0
        public void Parse_WithClassExpression_YieldsClassExpressionWithCorrectCaseSensitivity(string subject, bool?ignoreCase)
        {
            var parser = new PegParser();

            var grammar   = parser.Parse(subject);
            var charClass = (ClassExpression)grammar.Rules.Single().Expression;

            Assert.That(charClass.IgnoreCase, Is.EqualTo(ignoreCase));
        }
Exemplo n.º 4
0
        public void Parse_WhenTheGrammarIsEntirelyEmpty_ReturnsAnEmptySequence(string subject)
        {
            var parser = new PegParser();

            var grammar = parser.Parse(subject);

            var result = (SequenceExpression)grammar.Rules.Single().Expression;
            Assert.That(result.Sequence, Is.Empty);
        }
Exemplo n.º 5
0
        public void Parse_WithClassExpression_YieldsClassExpressionWithCorrectCaseSensitivity(string subject, bool? ignoreCase)
        {
            var parser = new PegParser();

            var grammar = parser.Parse(subject);
            var charClass = (ClassExpression)grammar.Rules.Single().Expression;

            Assert.That(charClass.IgnoreCase, Is.EqualTo(ignoreCase));
        }
Exemplo n.º 6
0
        public void Parse_WithSingleEmptyRule_YieldsRuleWithMatchingName()
        {
            var subject = "testName = ";
            var parser  = new PegParser();

            var grammar = parser.Parse(subject);

            Assert.That(grammar.Rules.Single().Identifier.Name, Is.EqualTo("testName"));
        }
Exemplo n.º 7
0
        public void RepeatResets()
        {
            var grammar = TestGrammar.Create();
            var parser  = new PegParser <TestData>(grammar, grammar.Root());
            var input   = "AAABBBBB";
            var result  = parser.Parse(input);

            Assert.AreEqual(input, result.Items);
        }
Exemplo n.º 8
0
        public void Parse_WithPegGrammar_Works()
        {
            var subject = File.ReadAllText("PegParser.peg");
            var parser  = new PegParser();

            var result = parser.Parse(subject);

            Assert.That(result, Is.Not.Null);
        }
Exemplo n.º 9
0
        public void Parse_WithNoRules_YieldsEmptyGrammar()
        {
            var subject = string.Empty;
            var parser  = new PegParser();

            var grammar = parser.Parse(subject);

            Assert.That(grammar.Rules, Is.Empty);
        }
Exemplo n.º 10
0
        public void CaptureInitializedProperly()
        {
            var grammar = TestGrammar.Create();
            var parser  = new PegParser <TestData>(grammar, grammar.Root());
            var input   = "AAABBBBB";
            var result  = parser.Parse(input);

            Assert.AreEqual(input, result.Items);
        }
Exemplo n.º 11
0
        public void Parse_WhenTheGrammarIsEntirelyEmpty_ReturnsAnEmptySequence(string subject)
        {
            var parser = new PegParser();

            var grammar = parser.Parse(subject);

            var result = (SequenceExpression)grammar.Rules.Single().Expression;

            Assert.That(result.Sequence, Is.Empty);
        }
Exemplo n.º 12
0
        public void Parse_WithSingleEmptyRule_YieldsRuleWithEmptySequenceExpression()
        {
            var subject = "a = ";
            var parser  = new PegParser();

            var grammar  = parser.Parse(subject);
            var sequence = (SequenceExpression)grammar.Rules.Single().Expression;

            Assert.That(sequence.Sequence, Is.Empty);
        }
Exemplo n.º 13
0
        public void Parse_WithLiteralExpression_YieldsLiteralExpressionWithCorrectString()
        {
            var subject = "a = 'testString'";
            var parser = new PegParser();

            var grammar = parser.Parse(subject);
            var literal = (LiteralExpression)grammar.Rules.Single().Expression;

            Assert.That(literal.Value, Is.EqualTo("testString"));
        }
Exemplo n.º 14
0
        public void Parse_WithCodeExpression_YieldsCodeExpressionWithCorrectCodeType(string subject, CodeType codeType, bool inSequence)
        {
            var parser = new PegParser();

            var grammar        = parser.Parse(subject);
            var expression     = grammar.Rules.Single().Expression;
            var codeExpression = (CodeExpression)(inSequence ? ((SequenceExpression)expression).Sequence.Single() : expression);

            Assert.That(codeExpression.CodeType, Is.EqualTo(codeType));
        }
Exemplo n.º 15
0
        public void Parse_WithLiteralExpression_YieldsLiteralExpressionWithCorrectString()
        {
            var subject = "a = 'testString'";
            var parser  = new PegParser();

            var grammar = parser.Parse(subject);
            var literal = (LiteralExpression)grammar.Rules.Single().Expression;

            Assert.That(literal.Value, Is.EqualTo("testString"));
        }
Exemplo n.º 16
0
        public void Compile_WithExpressionWhoseTypeIsNotDefined_YieldsError()
        {
            var parser  = new PegParser();
            var grammar = parser.Parse("a -memoize = a;");

            var result = PegCompiler.Compile(grammar);

            var error = result.Errors.Single();

            Assert.That(error.ErrorNumber, Is.EqualTo("PEG0019"));
            Assert.That(error.IsWarning, Is.False);
        }
Exemplo n.º 17
0
        public void Compile_WithUnmemoizedLeftRecursion_YieldsError(string subject)
        {
            var parser  = new PegParser();
            var grammar = parser.Parse(subject);

            var result = PegCompiler.Compile(grammar);

            var error = result.Errors.First();

            Assert.That(error.ErrorNumber, Is.EqualTo("PEG0020"));
            Assert.That(error.IsWarning, Is.False);
        }
Exemplo n.º 18
0
        public void Parse_WhenACSharpExpressionDoesntConsumeAllOfTheSourceText_YieldsError()
        {
            var parser = new PegParser();

            try
            {
                parser.Parse("a = {{ return \"OK\"; } extra }");
            }
            catch (FormatException ex)
            {
                Assert.That(ex.Message, Is.StringStarting("PEG0011:"));
                var cursor = (Cursor)ex.Data["cursor"];
                Assert.That(cursor.Location, Is.EqualTo(22));
            }
        }
Exemplo n.º 19
0
        public void Compile_WithComplexLeftRecursion_Succeeds()
        {
            var parser  = new PegParser();
            var grammar = parser.Parse(@"a<o> -memoize = b;
                                         b<o> -memoize = c;
                                         c<o> -memoize = e / d;
                                         d<o> = e;
                                         e<o> -memoize = f;
                                         f<o> -memoize = g;
                                         g<o> -memoize = g;");

            var result = PegCompiler.Compile(grammar);

            Assert.That(result.Errors, Is.Empty);
        }
Exemplo n.º 20
0
        public void Parse_WhenACSharpExpressionDoesntConsumeAllOfTheSourceText_YieldsError()
        {
            var parser = new PegParser();

            try
            {
                parser.Parse("a = {{ return \"OK\"; } extra }");
            }
            catch (FormatException ex)
            {
                Assert.That(ex.Message, Is.StringStarting("PEG0011:"));
                var cursor = (Cursor)ex.Data["cursor"];
                Assert.That(cursor.Location, Is.EqualTo(22));
            }
        }
Exemplo n.º 21
0
        public void Parse_WithClassExpression_YieldsClassExpressionWithCorrectCharacterRanges()
        {
            var subject = "a = [-a-z0-9]";
            var parser = new PegParser();

            var grammar = parser.Parse(subject);
            var charClass = (ClassExpression)grammar.Rules.Single().Expression;

            var expected = new[]
            {
                new CharacterRange('-', '-'),
                new CharacterRange('a', 'z'),
                new CharacterRange('0', '9'),
            };
            Assert.That(charClass.Ranges, Is.EquivalentTo(expected));
        }
Exemplo n.º 22
0
        public void Parse_WithClassExpression_YieldsClassExpressionWithCorrectCharacterRanges()
        {
            var subject = "a = [-a-z0-9]";
            var parser  = new PegParser();

            var grammar   = parser.Parse(subject);
            var charClass = (ClassExpression)grammar.Rules.Single().Expression;

            var expected = new[]
            {
                new CharacterRange('-', '-'),
                new CharacterRange('a', 'z'),
                new CharacterRange('0', '9'),
            };

            Assert.That(charClass.Ranges, Is.EquivalentTo(expected));
        }
Exemplo n.º 23
0
        public void Parse_WithPegGrammar_Works()
        {
            var subject = File.ReadAllText("PegParser.peg");
            var parser = new PegParser();

            var result = parser.Parse(subject);
            Assert.That(result, Is.Not.Null);
        }
Exemplo n.º 24
0
        public void Compile_WithComplexLeftRecursion_Succeeds()
        {
            var parser = new PegParser();
            var grammar = parser.Parse(@"a<o> -memoize = b;
                                         b<o> -memoize = c;
                                         c<o> -memoize = e / d;
                                         d<o> = e;
                                         e<o> -memoize = f;
                                         f<o> -memoize = g;
                                         g<o> -memoize = g;");

            var result = PegCompiler.Compile(grammar);

            Assert.That(result.Errors, Is.Empty);
        }
Exemplo n.º 25
0
        public void Parse_WithSingleEmptyRule_YieldsRuleWithMatchingName()
        {
            var subject = "testName = ";
            var parser = new PegParser();

            var grammar = parser.Parse(subject);

            Assert.That(grammar.Rules.Single().Identifier.Name, Is.EqualTo("testName"));
        }
Exemplo n.º 26
0
        public void Parse_WithSingleEmptyRule_YieldsRuleWithEmptySequenceExpression()
        {
            var subject = "a = ";
            var parser = new PegParser();

            var grammar = parser.Parse(subject);
            var sequence = (SequenceExpression)grammar.Rules.Single().Expression;

            Assert.That(sequence.Sequence, Is.Empty);
        }
Exemplo n.º 27
0
 public void Parse_WhenACSharpExpressionHasUnbalancedCurlyBraces_Succeeds()
 {
     var parser = new PegParser();
     Assert.That(() => parser.Parse("curly = { \"{\" }"), Throws.Nothing);
 }
Exemplo n.º 28
0
 public static InputString Parse(string s)
 {
     return(Parser.Parse(s));
 }
Exemplo n.º 29
0
 public static JsonPathExpression Parse(string s)
 {
     return(Parser.Parse(s));
 }
Exemplo n.º 30
0
        public void Parse_WhenACSharpExpressionHasUnbalancedCurlyBraces_Succeeds()
        {
            var parser = new PegParser();

            Assert.That(() => parser.Parse("curly = { \"{\" }"), Throws.Nothing);
        }
Exemplo n.º 31
0
        public void Compile_WithExpressionWhoseTypeIsNotDefined_YieldsError()
        {
            var parser = new PegParser();
            var grammar = parser.Parse("a -memoize = a;");

            var result = PegCompiler.Compile(grammar);

            var error = result.Errors.Single();
            Assert.That(error.ErrorNumber, Is.EqualTo("PEG0019"));
            Assert.That(error.IsWarning, Is.False);
        }
Exemplo n.º 32
0
        public void Compile_WithUnmemoizedLeftRecursion_YieldsError(string subject)
        {
            var parser = new PegParser();
            var grammar = parser.Parse(subject);

            var result = PegCompiler.Compile(grammar);

            var error = result.Errors.First();
            Assert.That(error.ErrorNumber, Is.EqualTo("PEG0020"));
            Assert.That(error.IsWarning, Is.False);
        }
Exemplo n.º 33
0
        public void Parse_WithCodeExpression_YieldsCodeExpressionWithCorrectCodeType(string subject, CodeType codeType, bool inSequence)
        {
            var parser = new PegParser();

            var grammar = parser.Parse(subject);
            var expression = grammar.Rules.Single().Expression;
            var codeExpression = (CodeExpression)(inSequence ? ((SequenceExpression)expression).Sequence.Single() : expression);

            Assert.That(codeExpression.CodeType, Is.EqualTo(codeType));
        }