def parse_method_call(self, left):
expr = ast.MethodCall(self.cur_tok, left, [])
while self.peek_in(self.arg_tokens) or self.peek_in(token.keywords.values()):
self.next()
if self.cur_in(token.keywords.values()):
expr.pattern.append(ast.Identifier(self.cur_tok))
continue
arg = lambda val: ast.Argument(self.cur_tok, val)
handlers = {
token.ID: lambda: ast.Identifier(self.cur_tok),
token.LPAREN: lambda: arg(self.parse_grouped_expr()),
token.NUM: lambda: arg(self.parse_num()),
token.NULL: lambda: arg(self.parse_null()),
token.TRUE: lambda: arg(self.parse_bool()),
token.FALSE: lambda: arg(self.parse_bool()),
token.STR: lambda: arg(self.parse_string()),
token.PARAM: lambda: arg(ast.Identifier(self.cur_tok)),
token.LSQUARE: lambda: arg(self.parse_array_or_map()),
token.LBRACE: lambda: arg(self.parse_block_literal()),
}
handler = handlers[self.cur_tok.type]
expr.pattern.append(handler())
if len(expr.pattern) == 0:
self.err("expected at least one item in a pattern")
return None
return expr
评论列表
文章目录