parser.py 文件源码

python
阅读 20 收藏 0 点赞 0 评论 0

项目:pluto-lang 作者: Zac-Garby 项目源码 文件源码
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
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号