【发布时间】:2014-05-06 22:16:48
【问题描述】:
有谁知道我可以用来从 AST 生成 Python 代码的工具吗?
我已经成功地编写了一个标记器和一个解析器,但我正在寻找一种更 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 这样的更大对象时,这变得更加流行。我只是想知道是否有更好的方法来做到这一点。
【问题讨论】:
-
如果有帮助的话,标准 python 库中有 ast 模块。你检查过这个吗?
-
我正在尝试从我为实验编写的玩具编程语言生成 Python 代码。我查看了那个模块,但看不出它有什么帮助。
-
当您说“Python 代码”时,您是指文本源代码还是字节码?当您说“AST”时,您是指 Python 的 AST(在
ast模块中实现)还是您自己语言的 AST? -
如果这是您自己的 AST,那么您将负责编写自己的 Python 代码生成器。通用工具无法理解您自己的特定 AST。
-
... 关注标题中的问题,请参阅stackoverflow.com/q/3455456/120163 了解我真正希望您面临的问题。
标签: python compiler-construction abstract-syntax-tree