Mathe Parser
-
a+b=c schrieb:
return (z / term1(s));a+b=c schrieb:
return (z - term(s));Deine Operatoren sind rechtsassoziativ. Du Subtrahierst / Dividierst hier immer durch den rechten Term. Richtig wäre, nacheinander zu subtrahieren/dividieren. Meiner Meinung nach geht das nur Iterativ, ich lasse mich aber gerne eines besseren belehren.
P.S.: Ich empfehle dir, das Lexing und Parsing zu trennen, macht einiges einfacher.
P.P.S.: Klammern um Returnvalues sind hässlich.
-
Mach es wie Knuth und wandle den Ausdruck erst in Postfix um und parse dann den.
Oder schau dir einmal diese fertige Lösung von Werner Salomon an.
-
@c_P_P
Danke für den Link. Hab nun, ähnlich wie in der Stroustrup-Lösung, while-Schleifen implementiert.
Eigentlich eine ganz simple Lösung.
P.S.: Ich empfehle dir, das Lexing und Parsing zu trennen, macht einiges einfacher.
Bei dem einfachen Programm kann ich mir nur schwer eine Verbesserung durch die Trennung zwischen Lexer und Parser vorstellen.
-
Je komplizierte die Ausdrücke werden, desto eher lohnt es sich.

-
-
Lustig, dass ich erst vor ein paar Tagen ein Parser Konzept gebastelt habe... (jedoch komplexer mit Variablen, Klammern, Operatorenreihenfolge und Funktionen)
-
jjj schrieb:
Iiiih, der arbeitet ja mit std::string. Wie langsam.
-
314159265358979 schrieb:
jjj schrieb:
Iiiih, der arbeitet ja mit std::string. Wie langsam.
Es handelt sich um einen Artikel und da zählt Geschwindigkeit nicht. Aber zum Download steht sogar eine einfache Version in C bereit. Hättest du dich mal genauer damit befasst bevor du meckerst.

-
C ist aber auch doph.
-
boah PI ...
-
Da ist der gute Pi so begeistert von meiner Range Idee, will sie aber einfach nicht Range nennen.

const_string. Pff.
-
Die Idee ist nicht von dir.