필요한 것은 문자열이 유효한 수학 표현식인지 여부를 파이썬을 사용하여 확인하는 것입니다.수학 구문 검사기가 파이썬으로 작성된 경우
단순화를 위해 숫자와 중첩 된 괄호로 + - * /
연산자 (+ -
도 단항으로) 만 필요하다고 가정 해 봅시다. 또한 완성을 위해 간단한 변수 이름을 추가합니다. 나는 pyparsing 그러나 다만 시도하는 예를 시도
test("-3 * (2 + 1)") #valid
test("-3 * ") #NOT valid
test("v1 + v2") #valid
test("v2 - 2v") #NOT valid ("2v" not a valid variable name)
:
그래서 나는이 방법으로 테스트 할 수 있습니다 내가 잘못된 코드를 통과하고 또한 내가 항상 잘못된 구문이 예외를 발생시키지 않고 구문 분석 얻을 그것을 해결하기 위해 노력 얻을 "simple algebraic expression parser, that performs +,-,*,/
and ^
arithmetic operations"을
단지 시도 :
>>>test('9', 9)
9 qwerty = 9.0 ['9'] => ['9']
>>>test('9 qwerty', 9)
9 qwerty = 9.0 ['9'] => ['9']
시험 패스 모두 ... 오 _O
어떤 조언이 필요합니까?
왜냐하면'pi'는'pi'이고'querty'가 아니고 ident는 단지 괄호 뒤에옵니다. 물론 유효한 구문 검사기로 작동하도록 pyparsing을 얻을 수 있다면 나는 그것을 원합니다. . 나는 LEPL에게도 기회를 줄 것이다. – neurino
@neuriono : 그럼 소스 코드가 오해의 소지가 있고 문법이 실제로 달라 지거나 pyparsing이 깨졌습니다 (편집 : 내가 생각할 수있는 한 가지 설명, "pyparsing is broken"카테고리에 속할 것입니다.). 전체 문자열이 아니라 오히려 종료하고 나머지 입력이 구문 분석에 실패한 경우 지금까지 구문 분석 한 결과를 반환합니다. – delnan
이것은 꽤 분명하지만, 파서 (def BNF())를 작성하는 코드 부분을 보면 매우 간단하고 심지어 _exponentiation_ 부분을 제거하는 것조차도 더 간단하다. 그래서 pyparsing이 좋지 않을 것이라고 생각한다. 문법 검사 중. – neurino