2012-07-19 77 views
3

我希望解析表示布爾表達式的字符串。以下代碼基於許多示例,並使用pyparsing的operatorPrecedence助手。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'] 

所以第一個字符串的工作原理,但可根據需要在第二個字符串不引發異常。

任何想法,我可以做到這一點?我對pyparsing不是特別熟悉,所以我可能錯過了那裏的一些東西。

回答

3

更改您的A_和B_的定義以使用Keyword類而不是Literal類。

此外,當您調用parseString時,請添加parseAll=True,以便強制解析整個輸入。

相關問題