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에 익숙하지 않다. 그래서 나는 거기에서 무엇인가 놓칠 수 있었다.