我试图根据我在pyparsing中所做的事情来实现我所做的一些新事物,我也很陌生。如何编写简单的嵌套搜索,例如:
thecontent = pyparsing.Word(pyparsing.alphanums) | '&' | '|'
parens = pyparsing.nestedExpr( '(', ')', content=thecontent)
使用PLY?
答案 0 :(得分:0)
你在pyparsing中所写的内容并不能很好地转化为PLY,因为它甚至几乎都不是解析器。 nestedExpr
是一个帮助器,用于快速定义“我真的不知道这里有什么,但它被()
(或{}
'或{{{{{{ 1}}或者其他什么),它们可以嵌套“。非常方便解析像C这样的'{}'分隔语言,将一个简单的函数定义定义为[]
。鉴于您要定义的内容包括'&'和'|'运算符,听起来你真的想解析一个布尔表达式,包括支持括号分组来覆盖操作的优先级。
pyparsing wiki的Examples页面上的simpleBool.py示例显示了一些支持布尔表达式解析的测试用例和表达式。 BUT 它仍然使用辅助方法type_spec + identifier + parameter_spec + nestedExpr('{', '}')
,它隐藏了大部分解析器定义步骤,因此再次难以直接转换为PLY。我引用了这个例子,因为它可以帮助你澄清解析布尔表达式所涉及的内容(包括解析布尔文字,如“True”,“False”等),并可能添加对“not”运算符的支持。此外,它将为您提供一堆免费的测试用例 - 帮助自己!
要查看类似于PLY预期的更明确的语法,请查看pyparsing的fourFn.py示例。它早于infixNotation
助手,因此明确地构建了各种操作优先级。 (这种算术运算符优先级实现形式的优雅主要是让我对解析应用程序感兴趣的原因。)