Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从自定义设计的抽象语法树生成Python代码_Python_Compiler Construction_Abstract Syntax Tree - Fatal编程技术网

从自定义设计的抽象语法树生成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)的内

有人知道我可以用什么工具从AST生成Python代码吗

我已经成功地编写了一个标记器和一个解析器,但我正在寻找一种更具Python风格的方法来从中生成Python代码。 我以前使用过
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实际上就是我要找的。谢谢您的帮助:-)