从自定义设计的抽象语法树生成Python代码

时间:2014-05-06 22:16:48

标签: python compiler-construction abstract-syntax-tree

有没有人知道我可以用来从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
...

当我必须实施更大的对象(例如FunctionsClasses)时,这会变得更加潮流。我只是想知道是否有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

有python模块ast启用此功能。如果你正在做自己的tokaniser,你可能只需要评估ast的评估者和compile()。还有一个从ast生成python代码的notarser,可以在python源代码中找到。 unparse.py