私は 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' などの式を解析しますが、空の文字列または空の括弧 '()' が指定されているエッジ ケースでは失敗します。この問題を解決するにはどうすればよいですか?