从自定义设计的抽象语法树生成Python代码
有人知道我可以用什么工具从AST生成Python代码吗 我已经成功地编写了一个标记器和一个解析器,但我正在寻找一种更具Python风格的方法来从中生成Python代码。 我以前使用过从自定义设计的抽象语法树生成Python代码,python,compiler-construction,abstract-syntax-tree,Python,Compiler Construction,Abstract Syntax Tree,有人知道我可以用什么工具从AST生成Python代码吗 我已经成功地编写了一个标记器和一个解析器,但我正在寻找一种更具Python风格的方法来从中生成Python代码。 我以前使用过LLVMPY,我想知道是否有类似的东西可以用来生成Python代码,而不是llvmir 非常感谢您的建议:-) 编辑 这不是Python AST。它来自我自己的语言,所以我知道没有一个工具可以神奇地理解它。我只是在寻找一些在生成源代码方面可以满足我要求的东西 例如: 使用类似于a=builder.add(1,2)的内
LLVMPY
,我想知道是否有类似的东西可以用来生成Python代码,而不是llvmir
非常感谢您的建议:-)
编辑
这不是Python AST。它来自我自己的语言,所以我知道没有一个工具可以神奇地理解它。我只是在寻找一些在生成源代码方面可以满足我要求的东西
例如:
使用类似于a=builder.add(1,2)
的内容,而不是连接字符串以生成a=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
...
当我必须实现更大的对象,如函数
和类
时,这会变得更加整洁。我只是想知道是否有更好的方法来实现这一点。有一个python模块可以实现这一点。若你们在做自己的tokaniser,你们可能只需要评估ast和那个评估ast的评估器。还有一个从ast生成python代码的unparser,可以在python源代码repo中找到 如果有帮助的话,标准pythonlibray中有模块ast。你检查过了吗?我正在尝试从我为实验编写的玩具编程语言生成Python代码。我看了那个模块,但看不出它有什么帮助。当你说“Python代码”时,你指的是文本源代码还是字节码?当您说“AST”时,您是指Python的AST(在AST
模块中实现)还是您自己语言的AST?如果这是您自己的AST,那么您将负责编写自己的Python代码生成器。通用工具无法理解您自己的特定AST。。。。关注标题中的问题,请参阅,以了解我真正希望您面对的问题。在这个答案中肯定有一些指向正确方向的指针,但您对@s提到的玩具语言的Python AST和AST没有任何区别。请注意最近的一个问题(与Python 3兼容)unparse模块的版本是。我想unparse.py实际上就是我要找的。谢谢您的帮助:-)