问题描述
我正在尝试将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 (将#修改为@)