示例#1
0
 private static IReadOnlyList<Element> ExpressionList(SlimChainParser cp, bool isBlock)
 {
     var child = new List<Element>();
     InsideParser cond;
     if (isBlock)
     {
         cp = cp.Type(TokenType.LeftBrace);
         cond = icp => icp.Not.Type(TokenType.RightBrace);
     }
     else
     {
         cond = icp => icp.Readable();
     }
     cp.Opt.Call(ExpressionSeparators)
         .Any(
             iicp => iicp.Transfer(e => child.Add(e), Expression),
             iicp => iicp.AddError()
         )
         .Loop(cond, icp =>
         {
             icp.Opt.Call(ExpressionSeparators)
             .Opt.Any(
                 iicp => iicp.Transfer(e => child.Add(e), Expression),
                 iicp => iicp.AddError()
             );
         })
         .Opt.Call(ExpressionSeparators);
     return child;
 }
示例#2
0
 private static void ExpressionSeparators(SlimChainParser cp)
 {
     cp.Type(TokenType.EndExpression, TokenType.LineTerminator)
         .Ignore(TokenType.EndExpression, TokenType.LineTerminator);
 }