示例#1
0
 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);
     }
 }
示例#2
0
 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);
     }
 }
示例#3
0
 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);
     }
 }
示例#4
0
 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('^');
 }
示例#5
0
 public ChoiceRule(Rule[] xs)
 {
     foreach (Rule r in xs)
         Trace.Assert(r != null);
     mRules = xs;
 }
示例#6
0
 public PlusRule(Rule r)
 {
     Trace.Assert(r != null);
     mRule = r;
 }
示例#7
0
 public NoFailRule(Rule r, string s)
 {
     Trace.Assert(r != null);
     mRule = r;
     msMsg = s;
 }
示例#8
0
 public AstNodeRule(Object label, Rule r)
 {
     Trace.Assert(r != null);
     mLabel = label;
     mRule = r;
 }
示例#9
0
 public static Rule WhileNot(Rule elem, Rule term) { return new WhileNotRule(elem, term); }
示例#10
0
 public static Rule SemiColonList(Rule r)
 {
     return Opt(r + Star(Token(";") + NoFail(r)));
 }
示例#11
0
 public static Rule Choice(Rule x0, Rule x1, Rule x2)
 {
     return(new ChoiceRule(new Rule[] { x0, x1, x2 }));
 }
示例#12
0
 public static Rule Seq(Rule x0, Rule x1, Rule x2, Rule x3, Rule x4) { return new SeqRule(new Rule[] { x0, x1, x2, x3, x4 }); }
示例#13
0
 public static Rule Seq(Rule x0, Rule x1, Rule x2, Rule x3, Rule x4)
 {
     return(new SeqRule(new Rule[] { x0, x1, x2, x3, x4 }));
 }
示例#14
0
 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 }));
 }
示例#15
0
 public static Rule Seq(Rule x0, Rule x1, Rule x2)
 {
     return(new SeqRule(new Rule[] { x0, x1, x2 }));
 }
示例#16
0
 public static Rule NoFail(Rule r, string s)
 {
     return(new NoFailRule(r, s));
 }
示例#17
0
 public static Rule AstNode(Object label, Rule x)
 {
     return(new AstNodeRule(label, x));
 }
示例#18
0
 public WhileNotRule(Rule elem, Rule term)
 {
     mElem = elem;
     mTerm = term;
 }
示例#19
0
 public static Rule Choice(Rule x0, Rule x1, Rule x2, Rule x3, Rule x4)
 {
     return(new ChoiceRule(new Rule[] { x0, x1, x2, x3, x4 }));
 }
示例#20
0
 public static Rule NoFail(Rule r, string s) { return new NoFailRule(r, s); }
示例#21
0
 public static Rule Opt(Rule x)
 {
     return(new OptRule(x));
 }
示例#22
0
 public WhileNotRule(Rule elem, Rule term)
 {
     mElem = elem;
     mTerm = term;
 }
示例#23
0
 public static Rule Star(Rule x)
 {
     return(new StarRule(x));
 }
示例#24
0
 public static Rule Token(Rule r)
 {
     return r + WS;
 }
示例#25
0
 public static Rule Plus(Rule x)
 {
     return(new PlusRule(x));
 }
示例#26
0
 public static Rule Bracketed(Rule r)
 {
     return (Token("[") + NoFail(r + Token("]")));
 }
示例#27
0
 public static Rule Not(Rule x)
 {
     return(new NotRule(x));
 }
示例#28
0
 public StarRule(Rule r)
 {
     Trace.Assert(r != null);
     mRule = r;
 }
示例#29
0
 public static Rule WhileNot(Rule elem, Rule term)
 {
     return(new WhileNotRule(elem, term));
 }
示例#30
0
 public NoFailRule(Rule r, string s)
 {
     Trace.Assert(r != null);
     mRule = r;
     msMsg = s;
 }
示例#31
0
 public static Rule DelimitedGroup(String x, Rule r, String y)
 {
     return(Seq(CharSeq(x), Star(r), NoFail(CharSeq(y), "expected " + y)));
 }
示例#32
0
 public StarRule(Rule r)
 {
     Trace.Assert(r != null);
     mRule = r;
 }
示例#33
0
 public PlusRule(Rule r)
 {
     Trace.Assert(r != null);
     mRule = r;
 }
示例#34
0
 public NotRule(Rule r)
 {
     Trace.Assert(r != null);
     mRule = r;
 }
示例#35
0
 public static Rule Choice(Rule x0, Rule x1, Rule x2) { return new ChoiceRule(new Rule[] { x0, x1, x2 }); }
示例#36
0
 public static Rule AstNode(Object label, Rule x) { return new AstNodeRule(label, x); }
示例#37
0
 public static Rule Opt(Rule x) { return new OptRule(x); }
示例#38
0
 public static Rule Seq(Rule x0, Rule x1, Rule x2) { return new SeqRule(new Rule[] { x0, x1, x2 }); }
示例#39
0
 public static Rule Plus(Rule x) { return new PlusRule(x); }
示例#40
0
 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 }); }
示例#41
0
 public NotRule(Rule r)
 {
     Trace.Assert(r != null);
     mRule = r;
 }
示例#42
0
 public static Rule Choice(Rule x0, Rule x1, Rule x2, Rule x3, Rule x4) { return new ChoiceRule(new Rule[] { x0, x1, x2, x3, x4 }); }
示例#43
0
 public static Rule Token(Rule r)
 {
     return(r + WS);
 }
示例#44
0
 public static Rule Star(Rule x) { return new StarRule(x); }
示例#45
0
 public static Rule CommaList(Rule r)
 {
     return(Opt(r + Star(Token(",") + NoFail(r))));
 }
示例#46
0
 public static Rule Not(Rule x) { return new NotRule(x); }
示例#47
0
 public static Rule SemiColonList(Rule r)
 {
     return(Opt(r + Star(Token(";") + NoFail(r))));
 }
示例#48
0
 public static Rule DelimitedGroup(String x, Rule r, String y) { return Seq(CharSeq(x), Star(r), NoFail(CharSeq(y), "expected " + y)); }
示例#49
0
 public static Rule Paranthesized(Rule r)
 {
     return(Token("(") + NoFail(r + Token(")")));
 }
示例#50
0
 public static Rule CommaList(Rule r)
 {
     return Opt(r + Star(Token(",") + NoFail(r)));
 }
示例#51
0
 public static Rule Bracketed(Rule r)
 {
     return(Token("[") + NoFail(r + Token("]")));
 }
示例#52
0
 public static Rule Paranthesized(Rule r)
 {
     return (Token("(") + NoFail(r + Token(")")));
 }
示例#53
0
 public static Rule BracedGroup(Rule r)
 {
     return(Token("{") + Star(r) + NoFail(Token("}")));
 }
示例#54
0
 public static Rule BracedGroup(Rule r)
 {
     return (Token("{") + Star(r) + NoFail(Token("}")));
 }
示例#55
0
 public AstNodeRule(Object label, Rule r)
 {
     Trace.Assert(r != null);
     mLabel = label;
     mRule  = r;
 }