pyparsing
라이브러리를 사용하여 표현식에서 산술적 우선 순위에 따라 괄호를 만드는 파서를 만드는 방법은 무엇입니까? 예를 들어 *
은 +
보다 높은 우선 순위를 갖습니다.산술 우선 순위에 따라 괄호를 만드는 파이썬 파서
그것은 다음과 같이 수행해야합니다
»> print(wholeexp.parseString('3+5-2'))
[[['3', '+', '5'], '-', '2']]
»> print(wholeexp.parseString('3+(5-2)'))
[['3', '+', ['5', '-', '2']]]
»> print(wholeexp.parseString('3+5-2*4'))
[[['3', '+', '5'], '-', ['2', '*', '4']]]
나는 다음을 시도했지만 그것은 아주 잘 작동하지 않습니다. 내가 많이 알고 있지만 "토큰 클래스 생성을 간소화"섹션의 하단으로 스크롤 Simple Top-Down Parsing in Python 당신은 행동에 표시됩니다
from pyparsing import *
numb = Word(nums)
leftpar = Suppress('(')
rightpar = Suppress(')')
expr = Forward()
expr << Or([numb,
Group(leftpar + expr + "+" + expr + rightpar),
Group(leftpar + expr + "-" + expr + rightpar),
Group(leftpar + expr + "*" + expr + rightpar)])
wholeexp = expr + StringEnd()
[이 문서] (https://pyparsing.wikispaces.com/file/view/SimpleCalc.py)를 확인 했습니까? –
recursive descent parser가 도움이 될 것입니다 : https://en.wikipedia.org/wiki/Recursive_descent_parser. 또는 Shunting-yard 알고리즘 : https://en.wikipedia.org/wiki/Shunting-yard_algorithm. 하지만 우선이 질문을보고 선택할 선택을하십시오. http://stackoverflow.com/questions/28256/equation-expression-parser-with-precedence. – rajah9