Wie erstellt man einen Parser, der Klammern in arithmetische Priorität in Ausdrücken mit der Bibliothek pyparsing
macht? zum Beispiel *
hat höhere Priorität als +
.Python-Parser, der Klammern entsprechend der arithmetischen Priorität erstellt
Es sollte wie folgt vorgehen:
»> 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']]]
habe ich versucht, die folgenden, aber es funktioniert nicht sehr gut funktionieren. Wie sollten wir ändern ausdr hier:
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()
Haben Sie überprüft [diese Dokumentation] (https://pyparsing.wikispaces.com/file/view/SimpleCalc.py)? –
Ein rekursiver Descent-Parser hilft: https://en.wikipedia.org/wiki/Recursive_descent_parser. Oder ein Shunting-Yard-Algorithmus: https://en.wikipedia.org/wiki/Shunting-yard_algorithm. Aber zuerst diese SO Frage zu entscheiden, welche zu wählen: http://stackoverflow.com/questions/28256/equation-expression-parser-with-precedence. – rajah9