gpt4 book ai didi

python - 如何使用 pyparsing 构建简单的 AST

转载 作者:太空宇宙 更新时间:2023-11-03 18:36:45 26 4
gpt4 key购买 nike

例如,我会为非常简单的递归语法提取抽象语法树对于 C 函数调用语句。我将语法定义为:

name = Word(srange("[a-z]"), srange("[a-zA-Z0-9_]"))

func_args = Forward()
func_call = (name + "(" + func_args + ZeroOrMore(Word(",") + func_args) + ")").setParseAction(create_node)
func_args <<= (func_call | name)

res = func_call.parseString("func1(func2(v1,func3(v2,v3)))", True)

解析没问题,但我无法找出创建 AST 的最佳方法。

我想要这个示例字符串是这个 AST:

func1
- func2
- v1
- func3
- v2
- v3

假设我有一个类。当为第一个 func3(v2, v3) 调用回调 create_node 时,我应该为 func3 和子节点 v2< 创建节点v3 等等,直到解析外部语句。哪个是最好的方法?谢谢您

最佳答案

虽然您的示例代码让我感到困惑,但您是否尝试命名 token (类似于下面所示),然后对解析结果使用 dump()

...
func_call = (name + ...)('call')
func_args <<= (func_call | name)('func')
...
print(res.dump())

恐怕您必须调整此代码,但在某些地方是这样的。

关于python - 如何使用 pyparsing 构建简单的 AST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21431458/

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