为什么 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 示例页面上提供。
我组装了我的第一个 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 示例页面上提供。