@Artentus Eine Sache wäre noch zu klären:
Spoiler anzeigen
Warum werden bei Schritt 6 zwei Operator auf einmal aus dem Stack in den Output gepackt? Da der letzte Token noch nicht erreicht wurde kann es sich ja nicht um den Rest-Flush handeln. Was ist der Auslöser dafür?
1. Das Token ist 2, also eine Zahl, und kommt direkt zur Ausgabe.
Ausgabe: 2
Operatorstack: Leer
2. Das Token ist +, ein Operator. Da der Operatorstack leer ist müssen keine zusätzlichen Aktionen getätigt werden, der Token kommt direkt auf den Stack.
Ausgabe: 2
Operatorstack: +
3. Die Zahl 18 kommt wieder zur Ausgabe.
Ausgabe: 2 18
Operatorstack: +
4. Ein Operator, und diesmal ist der Stack ist nicht leer. Die Präzedenz des obersten Operators auf dem Stack (+) ist aber niedriger als die von /, deswegen werden wieder keine zusätzlichen Aktionen ausgeführt.
Ausgabe: 2 18
Operatorstack: + /
5. Zahl kommt auf den Stack.
Ausgabe: 2 18 3
Operatorstack: + /
6. Der oberste Operator auf dem Stack, Division, wir höher priorisiert als der aktuelle Operator Subtraktion und wird deswegen zur Ausgabe geschoben.
Ausgabe: 2 18 3 /
Operatorstack: +
Jetzt liegt der Additionsoperator auf dem Stack. Dieser hat die selbe Präzedenz wie Subtraktion, ist jedoch linksassoziativ und wird deswegen auch zur Ausgabe verschoben.
Ausgabe: 2 18 3 / +
Operatorstack: Leer
Nun muss der aktuelle Operator noch auf den Stack.
Ausgabe: 2 18 3 / +
Operatorstack: -
7. Noch eine Zahl, die auf die Ausgabe kommt.
Ausgabe: 2 18 3 / + 7
Operatorstack: -
8. Es befinden sich keine Tokens mehr in der Eingabeliste, wir leeren also als letze Handlung den Operatorstack vollständig in die Ausgabe.
Ausgabe: 2 18 3 / + 7 -
Ausgabe: 2
Operatorstack: Leer
2. Das Token ist +, ein Operator. Da der Operatorstack leer ist müssen keine zusätzlichen Aktionen getätigt werden, der Token kommt direkt auf den Stack.
Ausgabe: 2
Operatorstack: +
3. Die Zahl 18 kommt wieder zur Ausgabe.
Ausgabe: 2 18
Operatorstack: +
4. Ein Operator, und diesmal ist der Stack ist nicht leer. Die Präzedenz des obersten Operators auf dem Stack (+) ist aber niedriger als die von /, deswegen werden wieder keine zusätzlichen Aktionen ausgeführt.
Ausgabe: 2 18
Operatorstack: + /
5. Zahl kommt auf den Stack.
Ausgabe: 2 18 3
Operatorstack: + /
6. Der oberste Operator auf dem Stack, Division, wir höher priorisiert als der aktuelle Operator Subtraktion und wird deswegen zur Ausgabe geschoben.
Ausgabe: 2 18 3 /
Operatorstack: +
Jetzt liegt der Additionsoperator auf dem Stack. Dieser hat die selbe Präzedenz wie Subtraktion, ist jedoch linksassoziativ und wird deswegen auch zur Ausgabe verschoben.
Ausgabe: 2 18 3 / +
Operatorstack: Leer
Nun muss der aktuelle Operator noch auf den Stack.
Ausgabe: 2 18 3 / +
Operatorstack: -
7. Noch eine Zahl, die auf die Ausgabe kommt.
Ausgabe: 2 18 3 / + 7
Operatorstack: -
8. Es befinden sich keine Tokens mehr in der Eingabeliste, wir leeren also als letze Handlung den Operatorstack vollständig in die Ausgabe.
Ausgabe: 2 18 3 / + 7 -
Warum werden bei Schritt 6 zwei Operator auf einmal aus dem Stack in den Output gepackt? Da der letzte Token noch nicht erreicht wurde kann es sich ja nicht um den Rest-Flush handeln. Was ist der Auslöser dafür?
faxe1008