如何使用pyparsing构建一个简单的AST

2024-06-28 19:11:14 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我将为一个非常简单的递归语法提取一个抽象语法树 对于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:

^{pr2}$

假设我有一个类tree。当对第一个func3(v2, v3)调用回调create_node时,我应该使用childsv2v3等为{}创建节点,直到外部语句被解析。哪种方法最好?谢谢你


Tags: 方法namenodecreate语法argsv3语句
1条回答
网友
1楼 · 发布于 2024-06-28 19:11:14

当您的示例代码出现在我身上时,您是否尝试命名标记(类似于下面所示),然后在解析结果上使用dump()?在

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

恐怕你得修改一下这个代码,但是在这条路线的某个地方。在

相关问题 更多 >