我正在使用 pyparsing.operatorprecedence 来解析中缀表示法查询。代码是
filterExpr = pp.quotedString.setParseAction(pp.removeQuotes) |\
pp.Word(pp.printables, excludeChars="()")
searchTerm = (~and_ + ~or_ + ~not_) + filterExpr
searchExpr = pp.operatorPrecedence(
searchTerm,
[
(not_, 1, pp.opAssoc.RIGHT, SearchNotOperation),
(pp.Optional(and_, default="AND"), 2, pp.opAssoc.LEFT, SearchAndOperation),
(or_, 2, pp.opAssoc.LEFT, SearchOrOperation),
])
这会解析像 '(foo bar) 或 baz' 这样的表达式,但在提供空字符串或空括号 '()' 的边缘情况下会失败。我该如何解决这个问题?