pyparsingで文法をしましたが、問題があります。文法は(演算子の優先順位、括弧などを使用して)検索クエリを解析しようとします。スペースがand演算子のように機能する必要があります。
たとえば、これは正常に機能します。
(word and word) or word
しかし、これは失敗します:
(word word) or word
そして、2番目のクエリを最初のクエリと同じように機能させたいと思います。
私の実際の文法は次のとおりです。
WWORD = printables.replace("(", "").replace(")", "")
QUOTED = quotedString.setParseAction(removeQuotes)
OAND = CaselessLiteral("and")
OOR = CaselessLiteral("or")
ONOT = "-"
TERM = (QUOTED | WWORD)
EXPRESSION = operatorPrecedence(TERM,
[
(ONOT, 1, opAssoc.RIGHT),
(OAND, 2, opAssoc.LEFT),
(OOR, 2, opAssoc.LEFT)
])
STRING = OneOrMore(EXPRESSION) + StringEnd()