有没有人知道我可以用来从AST生成Python代码的工具?
我已成功编写了一个tokenizer和一个解析器,但我正在寻找一种更加Pythonic的方法来生成Python代码。
我之前使用过LLVMPY
,我想知道是否有类似的内容可以用来生成Python代码而不是LLVM IR
。
您的建议将受到高度赞赏: - )
修改
这是不 Python AST。它来自我自己的语言,所以我知道没有一种工具可以神奇地理解它。我只是在寻找可以在生成Source Code
方面遇到我的事情。
例如:
不是连接字符串以生成a = 1 + 2
,而是使用a = builder.add(1,2)
之类的内容。基本上任何可以省去生成字符串和手动处理缩进的痛苦的东西。有这样的吗?
我已经有一个消耗AST的课程,但我发现自己必须在任何地方做这样的事情:
...
elif node.type == "Assign":
_buffer = self.descend(node.args[0])
_buffer += self.descend(node.args[1])
_buffer += self.descend(node.args[2])
return _buffer
elif node.type == "BinOp":
_buffer = self.descend(node.args[1])
_buffer += node.args[0]
_buffer += self.descend(node.args[2])
return _buffer
...
当我必须实施更大的对象(例如Functions
和Classes
)时,这会变得更加潮流。我只是想知道是否有更好的方法来做到这一点。
答案 0 :(得分:2)
有python模块ast启用此功能。如果你正在做自己的tokaniser,你可能只需要评估ast的评估者和compile()。还有一个从ast生成python代码的notarser,可以在python源代码中找到。 unparse.py