如何使一個解析器,這將使使用pyparsing
庫根據表達式算術優先括號,使? 例如*
具有比+
更高的優先級。的Python語法分析器括號根據運算優先級
應該這樣做:
»> 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']]]
我嘗試以下,但它並不能很好地工作。我們應該如何改變EXPR這裏:
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)? –
遞歸下降解析器將幫助:https://en.wikipedia.org/wiki/Recursive_descent_parser。或者調車碼算法:https://en.wikipedia.org/wiki/Shunting-yard_algorithm。但首先看到這個問題來決定選擇哪個:http://stackoverflow.com/questions/28256/equation-expression-parser-with-precedence。 – rajah9