Пример #1
0
 private static AstNode ParseList(TokenStream stream)
 {
     stream.Expect (TokenClass.OpenBracket);
     ListExpression ret = new ListExpression (stream.Location);
     while (!stream.Match (TokenClass.CloseBracket)) {
         AstNode expr = ParseExpression (stream);
         if (stream.Accept (TokenClass.Keyword, "for")) {
             string ident = stream.Expect (TokenClass.Identifier).Value;
             stream.Expect (TokenClass.Keyword, "in");
             AstNode iterator = ParseExpression (stream);
             AstNode predicate = null;
             if (stream.Accept (TokenClass.Keyword, "when")) {
                 predicate = ParseExpression (stream);
             }
             stream.Expect (TokenClass.CloseBracket);
             return new ListCompExpression (expr.Location, expr, ident, iterator, predicate);
         }
         ret.Add (expr);
         if (!stream.Accept (TokenClass.Comma)) {
             break;
         }
     }
     stream.Expect (TokenClass.CloseBracket);
     return ret;
 }