ブール式を表す文字列を解析したいと考えています。次のコードは多くの例に基づいており、pyparsing の operatorPrecedence ヘルパーを使用しています。
問題は、文字列を適切に解析できない場合にコードで例外を発生させたいことです。現状では、多くの無効な式が静かに通過し、間違った式が返されます。
import pyparsing
_A = pyparsing.Literal('A')
_B = pyparsing.Literal('B')
bool_operand = pyparsing.Or((_A, _B))
precedence_list = [("NOT", 1, pyparsing.opAssoc.RIGHT),
("AND", 2, pyparsing.opAssoc.LEFT),
("OR", 2, pyparsing.opAssoc.LEFT),]
bool_parser = pyparsing.operatorPrecedence(bool_operand, precedence_list)
print bool_parser.parseString('A OR B OR NOT A') # A valid string
print bool_parser.parseString('A NOT AND B') # an invalid string
これは以下を出力します:
[['A', 'OR', 'B', 'OR', ['NOT', 'A']]]
['A']
したがって、最初の文字列は機能しますが、2 番目の文字列は必要に応じて例外を発生させません。
どうすればこれを行うことができますか?私は pyparsing に特に慣れていないので、何か見落としている可能性があります。