public static Rule NoFail(Rule x) { if (x is SeqRule) { SeqRule r = new SeqRule(); foreach (Rule child in x.Children) r.Add(NoFail(child)); return r; } else { return new NoFailRule(x); } }
static public void TestPeg(Rule r, string s) { try { Console.WriteLine("Trying to parse input '" + s + "' according to rule " + r.ToString()); ParseNode node = ParserState.Parse(r, s); if (node == null) Console.WriteLine("Test failed"); else Console.WriteLine("Test succeeded, node = " + node.ToString()); } catch (Exception e) { Console.WriteLine("Test failed with exception: " + e.Message); } }
static public void NegativeTestPeg(Rule r, string s) { try { Console.WriteLine("Trying to assure input '" + s + "' does not parse according to rule " + r.ToString()); ParseNode node = ParserState.Parse(r, s); if (node == null) Console.WriteLine("Test passed"); else Console.WriteLine("Test failed"); } catch (Exception e) { Console.WriteLine("Test failed with exception: " + e.Message); } }
public ParseExceptionContext(string s, int begin, int end, Rule r, string msg) { location = new ParseLocation(s, begin, end); this.msg = msg; s.GetRowCol(begin, out row, out col); line = s.GetLine(begin); StringBuilder sb = new StringBuilder(); int i = begin - 1; ptr = "^"; while (i >= 0) { if (s[i] == '\n') break; if (s[i] == '\t') ptr = "\t" + ptr; else ptr = " " + ptr; --i; } sb.Append('^'); }
public ChoiceRule(Rule[] xs) { foreach (Rule r in xs) Trace.Assert(r != null); mRules = xs; }
public PlusRule(Rule r) { Trace.Assert(r != null); mRule = r; }
public NoFailRule(Rule r, string s) { Trace.Assert(r != null); mRule = r; msMsg = s; }
public AstNodeRule(Object label, Rule r) { Trace.Assert(r != null); mLabel = label; mRule = r; }
public static Rule WhileNot(Rule elem, Rule term) { return new WhileNotRule(elem, term); }
public static Rule SemiColonList(Rule r) { return Opt(r + Star(Token(";") + NoFail(r))); }
public static Rule Choice(Rule x0, Rule x1, Rule x2) { return(new ChoiceRule(new Rule[] { x0, x1, x2 })); }
public static Rule Seq(Rule x0, Rule x1, Rule x2, Rule x3, Rule x4) { return new SeqRule(new Rule[] { x0, x1, x2, x3, x4 }); }
public static Rule Seq(Rule x0, Rule x1, Rule x2, Rule x3, Rule x4) { return(new SeqRule(new Rule[] { x0, x1, x2, x3, x4 })); }
public static Rule Seq(Rule x0, Rule x1, Rule x2, Rule x3, Rule x4, Rule x5, Rule x6) { return(new SeqRule(new Rule[] { x0, x1, x2, x3, x4, x5, x6 })); }
public static Rule Seq(Rule x0, Rule x1, Rule x2) { return(new SeqRule(new Rule[] { x0, x1, x2 })); }
public static Rule NoFail(Rule r, string s) { return(new NoFailRule(r, s)); }
public static Rule AstNode(Object label, Rule x) { return(new AstNodeRule(label, x)); }
public WhileNotRule(Rule elem, Rule term) { mElem = elem; mTerm = term; }
public static Rule Choice(Rule x0, Rule x1, Rule x2, Rule x3, Rule x4) { return(new ChoiceRule(new Rule[] { x0, x1, x2, x3, x4 })); }
public static Rule NoFail(Rule r, string s) { return new NoFailRule(r, s); }
public static Rule Opt(Rule x) { return(new OptRule(x)); }
public static Rule Star(Rule x) { return(new StarRule(x)); }
public static Rule Token(Rule r) { return r + WS; }
public static Rule Plus(Rule x) { return(new PlusRule(x)); }
public static Rule Bracketed(Rule r) { return (Token("[") + NoFail(r + Token("]"))); }
public static Rule Not(Rule x) { return(new NotRule(x)); }
public StarRule(Rule r) { Trace.Assert(r != null); mRule = r; }
public static Rule WhileNot(Rule elem, Rule term) { return(new WhileNotRule(elem, term)); }
public static Rule DelimitedGroup(String x, Rule r, String y) { return(Seq(CharSeq(x), Star(r), NoFail(CharSeq(y), "expected " + y))); }
public NotRule(Rule r) { Trace.Assert(r != null); mRule = r; }
public static Rule Choice(Rule x0, Rule x1, Rule x2) { return new ChoiceRule(new Rule[] { x0, x1, x2 }); }
public static Rule AstNode(Object label, Rule x) { return new AstNodeRule(label, x); }
public static Rule Opt(Rule x) { return new OptRule(x); }
public static Rule Seq(Rule x0, Rule x1, Rule x2) { return new SeqRule(new Rule[] { x0, x1, x2 }); }
public static Rule Plus(Rule x) { return new PlusRule(x); }
public static Rule Seq(Rule x0, Rule x1, Rule x2, Rule x3, Rule x4, Rule x5, Rule x6) { return new SeqRule(new Rule[] { x0, x1, x2, x3, x4, x5, x6 }); }
public static Rule Choice(Rule x0, Rule x1, Rule x2, Rule x3, Rule x4) { return new ChoiceRule(new Rule[] { x0, x1, x2, x3, x4 }); }
public static Rule Token(Rule r) { return(r + WS); }
public static Rule Star(Rule x) { return new StarRule(x); }
public static Rule CommaList(Rule r) { return(Opt(r + Star(Token(",") + NoFail(r)))); }
public static Rule Not(Rule x) { return new NotRule(x); }
public static Rule SemiColonList(Rule r) { return(Opt(r + Star(Token(";") + NoFail(r)))); }
public static Rule DelimitedGroup(String x, Rule r, String y) { return Seq(CharSeq(x), Star(r), NoFail(CharSeq(y), "expected " + y)); }
public static Rule Paranthesized(Rule r) { return(Token("(") + NoFail(r + Token(")"))); }
public static Rule CommaList(Rule r) { return Opt(r + Star(Token(",") + NoFail(r))); }
public static Rule Bracketed(Rule r) { return(Token("[") + NoFail(r + Token("]"))); }
public static Rule Paranthesized(Rule r) { return (Token("(") + NoFail(r + Token(")"))); }
public static Rule BracedGroup(Rule r) { return(Token("{") + Star(r) + NoFail(Token("}"))); }
public static Rule BracedGroup(Rule r) { return (Token("{") + Star(r) + NoFail(Token("}"))); }