为什么 PyParsinig 不在 AST 中存储生成规则名称?

Why doesn't PyParsinig store the generating rule name in the AST?

我组装了我的第一个 pyparsing 示例(我之前使用过 Irony 等其他框架),效果很好。一个AST可以通过pretty printing打印到控制台。

我找不到任何关于如何存储和查询 AST 节点规则名称的资源。 SetName("...") 无效。

我的输入文档在一个布尔表达式中可以有 1 到 5 个级别,所以我需要知道哪个规则匹配并生成了 AST 节点。

我还没有 post 我的语法 - 它不是最短的:)。

setName() 设置表达式的名称,如 integer,因此异常消息是有意义的 - 它描述表达式本身,而不是被解析的数据。 setResultsName() 设置解析值的名称,以便您可以从解析结果中按名称访问。 expr.setResultsName("abc") 也可以缩写为 expr("abc"),以减少语法定义中的丑陋混乱。

如果您正在解析布尔表达式,请查看源代码分发附带的 simpleBool.py 示例,或者在 http://pyparsing.wikispaces.com/file/view/simpleBool.py/451074414/simpleBool.py

的 pyparsing wiki 示例页面上提供。