private INode Parse(string expression) { var lexer = new Lexer(new StringReader(expression)); var grammar = new PegGrammar(); var parser = new Parser <INode>(grammar); return(parser.Parse(new TokenStream(lexer).Start())); }
public void TestGrammar() { var grammar = new PegGrammar(); Assert.AreEqual("'a'*", grammar.ParseExpression("'a'*").ToString()); Assert.AreEqual("[a-z]", grammar.ParseExpression("[\\141-\\172]").ToString()); //Assert.AreEqual("('a' / 'b' / 'c') / e", grammar.ParseExpression("('a' / 'b' / 'c')?").ToString()); //Assert.AreEqual("'c' / ('a'* 'b') / e", grammar.ParseExpression("'c' / ('a'* 'b')?").ToString()); }
public void TestPegGrammar() { var grammar = new PegGrammar(); grammar.EnsureGrammarBuilt(); var runner = new PatternCompiler(new Compiler(), new DefaultOptimizer(), new ILJitter { EnableMemoization = true, EnableCaptureMemoization = true, }).Compile(grammar.Grammar); var result = runner.Run(StringData); var patternNames = runner.GetPatternsTriedAt(StringData.Length).ToList(); Assert.AreEqual(true, result.IsSuccessful); Assert.IsTrue(patternNames.Count > 0); }