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")); }
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 ")); }
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")); }
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); }); }
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)); }
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)); }