Diskussion:Shunting-yard-Algorithmus
Beispiele vonnöten!
Ich bin der Meinung, dass man das ganze Veranschaulichen kann, indem man ein Beispiel einfügt, sodass zumindest erkennbar ist, was bei diesem Algorithmus zu was wird. Das ist in dem englischen Artikel http://en.wikipedia.org/wiki/Shunting-yard_algorithm ganz gut gelöst, finde ich. --Nico 17:00, 29. Jul. 2010 (CEST) Beantworten
- Ich habe mir jetzt einfach mal drei Bsp. ausgedacht und überprüft und hoffe sie sind allgemein genug. Argumenttrennzeichen habe ich zunächst mal weggelassen, kommt aber sicher noch. --Spezialist D 01:30, 18. Sep. 2013 (CEST) Beantworten
Divisionsoperator als Bruchstrich oder nicht
Man sollte vielleicht anmerken, dass im Pseudocode der Divisionsoperator (linksassotiativ, gleiche Präzedenz wie Multiplikationsoperator) als Bruchstrich gesehen wird (was einer Klammerung von Zähler und Nenner entspricht).
Die Eingabe von 6 / 2 * 3 führt zum Ergebnis 6 2 3 * /
Möchte man das nicht (sondern 6 2 / 3 *) und den Divisionsoperator wie (in Programmiersprachen) üblich verwenden, so muss der entsprechende Teil im Pseudocode folgendermaßen lauten:
WENN Token IST-Operator SOLANGE Stack IST-NICHT-LEER UND Stack-Spitze IST Operator UND Präzedenz von Token IST-KLEINERGLEICH Präzedenz von Stack-Spitze: Stack-Spitze ZU Ausgabe. ENDESOLANGE Token ZU Stack. ENDEWENN (nicht signierter Beitrag von Masterle (Diskussion | Beiträge) 08:39, 17. Okt. 2013 (CEST))Beantworten
BIS/SOLANGE
Mir kommt es komisch vor, dass die Anweisung an der einen Stelle SOLANGE heißt und an der anderen BIS. Ich denke, ich verstehe den Unterschied (BIS ist wie ein SOLANGE NICHT) aber ich habe erstmal gedacht, dass es sich um eine nachprüfende Schleife handelt. Ich würde es so lösen wie in der englischsprachigen Version, wo es überall WHILE heißt.
Fehler im Algorithmus?
Ich habe den Algorithmus implementiert und errechne dann mit der RPN das Ergebnis. Viele Rechnungen führen zum richtigen Ergebnis.
Allerdings wird zu infix 4-5+6 die RPN 4 5 6 + - erzeugt, was zum Ergebnis -7 führt, wobei dieses doch 5 ist.
Erwartet hätte ich die RPN 4 5 - 6 +. Diese erreiche ich jedoch mit dem hier im Pseudocode festgehaltenen Algorithmus nicht. Liegt der Fehler bei mir oder tatsächlich hier im Pseudocode?
Hier die Schritte wie ich sie nach diesem Algortihmus verstehe ( und wie es leider nicht funktioniert):
- Token 4 zur Ausgabe
- Token - auf den Stack
- Token 5 zur Ausgabe
- Da Token + nicht linksassoziativ ist, wird die Stack-Spitze (Minus operator) nicht ausgegeben
- Token + landet auf dem Stack
- Token 6 zur Ausgabe
- Der Stack wird Top-Down abgeräumt:
- Token + zur Ausgabe
- Token - zur Ausgabe
(nicht signierter Beitrag von 77.12.84.128 (Diskussion) 12:10, 14. Jan. 2021 (CET))Beantworten