我希望解析一个表示布尔表达式的字符串。下面的代码基于许多示例并使用pyparsing的operatorreceidence助手。在
问题是,我希望代码在无法合理解析字符串时引发异常。现在看来,许多无效的表达式只是悄悄地过去,而错误的表达式却被返回。在
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
该输出:
^{pr2}$因此,第一个字符串可以工作,但第二个字符串不会按需要引发异常。在
有什么办法吗?我对pyparsing不太熟悉,所以我可能漏掉了一些东西。在
更改A和B的定义以使用
Keyword
类而不是Literal
类。在另外,在调用parseString时,添加
parseAll=True
,这样就可以强制解析整个输入。在相关问题 更多 >
编程相关推荐