从令牌FunctionDef构建AST?

问题描述

我正在尝试将Python编译器构建为另一种语言。我正在使用python的tokenizer模块来获取令牌列表,并了解该访问者模式可用于操纵AST节点以定位语言。 但是,我不确定如何将令牌转换为AST。考虑到Python语法的大小,似乎必须有一种更简单的方法来构建AST,而不是一堆“ if”语句。我正在专门为AST构建python FunctionDef节点。我是否必须遍历令牌并使用if来仅检查非终端?...

我看过一些教程,例如;超级微型编译器,精巧的解释器,python文档

给出令牌列表,我想通过使用递归体面解析(FunctionDef.body =具有返回值的return语句)来输出此ast。

语法节点-https://docs.python.org/3/library/ast.html

tokens = [NAME:'def' NAME:'foo' LPAR:'(' NAME:'bar' COMMA:',' NAME:'verbose' RPAR:')' COLON:':' INDENT:'' NAME:'return' NAME:'bar' DEDENT:'']

ast = {
  'type': 'PROGRAM','body': [
     FunctionDef(identifier name,arguments args,stmt* body,expr* decorator_list,expr? returns,string? type_comment)
  ]
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)