3

ブール式を表す文字列を解析したいと考えています。次のコードは多くの例に基づいており、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 に特に慣れていないので、何か見落としている可能性があります。

4

1 に答える 1

3

Keywordクラスの代わりにクラスを使用するように、A_ と B_ の定義を変更しますLiteral

また、parseString を呼び出すときに、parseAll=True入力全体を強制的に解析するように追加します。

于 2012-07-19T16:25:39.970 に答える