gpt4 book ai didi

python - 使用 Python 的语法分析器并从树中构建文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:56:56 25 4
gpt4 key购买 nike

我有一个针对解释性语言的定制语法,我正在寻找有关解析器的建议,该解析器将创建一个我可以查询的树。我希望能够从结构中生成解释语言的代码。我见过的大多数语法解析器都会验证现有代码。我的问题的第二部分是语法是否应该抽象到 Python 代码将树中的符号替换为实际代码术语的程度?理想情况下,我希望能够查询根符号并返回属于该根的所有符号,依此类推一直到终端符号。

有关此过程的任何建议或我的词汇表都会非常有帮助。谢谢。

最佳答案

绝大多数解析器库都会根据您生成的任何代码创建一个抽象语法树 (AST);你可以使用任何东西,例如 pyparsing .要从 AST 到代码,您可能必须手动编写函数来执行此操作,但以递归方式执行此操作非常容易。例如:

def generate(ast):
if ast[0] == '+':
return generate(ast[1]) + " + " + generate(ast[2])
elif ast[0] == 'for':
return "for %s in %s:\n" % (ast[1], generate(ast[2])) + generate(ast[3])
...

假设一个 AST 结构只是一个列表,其中第一个元素是节点名称的标记,后面是任何参数的树:[+, 4, [*, 'x', 5]]。当然,除非您自己编写解析器,否则您应该使用解析器库使用的任何内容。

我不明白您所说的 Python 代码用树中的符号替换实际代码术语是什么意思。

您可以编写一个简单的函数来遍历根节点下的所有符号:

def traverse_preorder(ast):
yield ast[0]
for arg in ast[1:]:
for x in traverse_preorder(arg):
yield x

再三考虑,由于 ast 模块,变量名 ast 可能是一个糟糕的选择。

关于python - 使用 Python 的语法分析器并从树中构建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9090000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com