Einen Parser implementieren
-
Hallo, da ich mir jetz vorstellen kann wie ein Parser funktioniert habe ich mich hingesetzt um das mal zu implementieren.
Alllssoooo,
das ist der String den ich berechnen will.
2 + 4 * 5 + 3
Wo fange ich jetzt an ???
Ich könnte erst einmal nach dem + im String suchen. Hmmm bringt das was? Oder soll ich nach den Zahlen suchen gleich mit den Vorzeichen oder doch ohne.
-
Wenn du erst nach + und - suchst, wird das Ergebnis falsch; * und / haben eine höhere Priorität.
-
-
2. Wiederhole: Lies das nächste Zeichen. fall das Zeichen ein Operand ist, kommt er in den Zahlenstapel ein Operator ist, überprüfe seine Priorität. falls der Operator keine (höhere) Priorität gegenüber dem obersten Operator im Operatorstapel besitzt, werte diesen aus (also den der vorher eingelesen wurde - du nimmst die letzten beiden Zahlen vom Zahlenstapel und verrechnest sie).Dann legst du das ergebnis wieder auf den Zahlenstapel ab (nicht vergessen die verrechneten Zhalen zu löschen) Speicher jetzt den neuen operator im Operatorenstapel eine offene Klammer ist - ablegen eine schließende klammer ist - die Auswertung aller Operatoren durchführen zurück bis zur entsprechen offenen Klammer. Entferne die offene Klammer bis der Ausdruck abgearbeitet ist 3, Falls der Operatorenstapel nicht leer ist - Operatoren auswerten
Mal sehen, ich halte mich mal an das hier. Ich hoffe ich bekomme das hin
-
Hallo,
wenn es Dir nicht nur um den Spass am entwickeln
geht:Google mal nach lex und yacc (alternativ GNU bison),
das sind Parser-Generatoren (kommt C-Code bei raus).Ansonsten kommts drauf an wie mächtig das Ding sein soll,
für das Beispiel reicht sicher ne einfach switch/case lösung in
ner Schleife, ansonsten würd ich mich mal mit Zustandsmaschinen
befassen - damit bekommt man sowas etwas generischer hin.Gruß,
Stefan