Frage

Ich teste einen Infix-to-Postfix-to-Infix-Wandler und eine Art von Unsicherheit gefunden. Zum Beispiel kann eine einfache Infix Summe

1 + 2 + 3 + 4

kann Postfix ein umgewandelt werden

1 2 + 3 + 4 +

, dass die Betreiber mit gleicher Priorität angenommen werden nicht gesammelt. Wenn sie dann bekomme ich

1 2 3 4 + + +

Auf der anderen Seite sind alle folgenden Postfix-Ausdrücke können in die Ausgangssumme umgewandelt werden

1 2 + 3 + 4 +
1 2 + 3 4 + +
1 2 3 4 + + +

Sind alle diese postfix Ausdrücke korrekt?

UPDATE1

Wenn Sie einen solchen Konverter machen würde, zu welcher Form würden Sie wählen? Ich brauche einen für die Prüfung zu wählen.

War es hilfreich?

Lösung

Sie müssen eine zusätzliche Einschränkung definieren.

Mathematisch Ihre Postfix-Ausdrücke sind alle gleich. Aber auf einem Computer Integer-Addition ist nicht wirklich commutative wegen Überlauf.

Ersetzen 1 2 3 4 mit a b c d und betrachten die Möglichkeit eines Überlaufens. Die meisten Programmiersprachen definieren, dass a + b + c + d muss ausgewertet links nach rechts, so dass a b + c + d + die einzig richtige Übersetzung ist.

Erst wenn Sie festlegen, dass die Reihenfolge der Auswertung ist ‚nicht spezifiziert‘ alle Postfix-Versionen sind gleichwertig. Das war der Fall für (ältere) C Compiler.

Andere Tipps

Ja, alles in Ordnung. Sie entsprechen den folgenden klammert Infix Ausdrücke:

((1 + 2) + 3) + 4
(1 + 2) + (3 + 4)
1 + (2 + (3 + 4))

+ ist verwirrend - es kommutativ ist, so in der Tat, jedes Ergebnis scheint richtig

.

Betrachten + mit anderen Betreibern zu ersetzen. 1 a 2 b 3 c 4
Das richtige Ergebnis hier, für links assoziative Operatoren, ist

1 2 a 3 b 4 c

Also, in Ihrem Fall würde ich erwarten 1 2 + 3 + 4 +

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top