鉴于 pyparsing 的工作原理,我如何在 ply 中实现它

How do I implement this in ply, given how pyparsing works

我正在尝试根据我在 pyparsing 中所做的工作,在 ply 中实现一些我很陌生的东西,我也很陌生。我如何编写一个简单的嵌套搜索,例如:

thecontent = pyparsing.Word(pyparsing.alphanums) | '&' | '|' 
parens = pyparsing.nestedExpr( '(', ')', content=thecontent)

通过使用 PLY?

您在 pyparsing 中编写的内容不能很好地转换为 PLY,因为它甚至连解析器都算不上。 nestedExpr 是快速定义 "I don't really know what's in this, but it's surrounded by ()'s (or {}'s or []'s or whatever), and they can be nested" 形式的表达式的助手。解析像 C 这样以“{}”分隔的语言非常方便,可以将简单的函数定义定义为 type_spec + identifier + parameter_spec + nestedExpr('{', '}')。鉴于您正在定义内容以包含“&”和“|”运算符,听起来您真的想要 解析 布尔表达式,包括支持括号分组以覆盖操作的优先级。

pyparsing wiki 示例页面上的 simpleBool.py 示例显示了一些支持布尔表达式解析的测试用例和表达式。 但是它仍然使用辅助方法,infixNotation,它隐藏了很多解析器定义步骤,因此同样很难直接转换为 PLY。不过,我引用了这个例子,因为它可以帮助您阐明解析布尔表达式所涉及的内容(包括解析布尔文字,如 "True"、"False" 等,并且可能添加对 "not" 运算符)。此外,它还会为您提供大量免费测试用例 - 帮助您自己!

要查看类似于 PLY 所期望的更明确的语法,请查看 pyparsing 的 fourFn.py 示例。它早于 infixNotation 助手,因此明确地建立了各种操作优先级。 (这种算术运算符优先级实现形式的优雅在很大程度上让我首先对解析应用程序感兴趣。)