Wie ich das vor Jahren gemacht habe, erfand ich einen neuen Operator für meinen Postfix-Ausdruck. Wenn ich also im Infix auf ein unäres Minus stößt, würde ich es in #
umwandeln. Also mein Postfix für a + -b
wurde ab#+
.
Und natürlich musste mein Evaluator wissen, dass #
nur einen Operanden knallte.
Die Art hängt davon ab, wie Sie den Postfix-Ausdruck verwenden, sobald er erstellt wurde. Wenn Sie es anzeigen möchten, würde Ihr spezieller Operator wahrscheinlich Leute verwirren. Aber wenn Sie es nur intern verwenden (was ich war), dann funktioniert es großartig.
Es gibt mehrere Lösungen für dieses Problem, afaik alle von ihnen sind bis zu einem gewissen Grad hackish. – harold
Zwei Jahre nach deinem Post hatte ich gerade die gleiche Frage. Es ist die Frage, die immer relevant ist. Hier ist eine Beobachtung: Das Hinzufügen einer Null (was ich auch in Betracht gezogen habe) wird nicht immer funktionieren: Beispiel: - 3 würde in 0 konvertiert werden - 3 -3 = -6 Die meisten Parser würden das Minus als ein Mal minus ein Produkt anwenden , was wäre: - (-3) = 6. Cheers, – MrVelez
@MrVelez: Sie haben Recht, dass die Vorsilbe Null funktioniert nicht, aber aus einem anderen Grund. Die Vorverarbeitung von '- 3' durch vorangestellte Nullen sollte '0-0-3' ergeben (nicht '0-3-3', woher kommt die zweite 3?). Ie ', - 3' -> '0 -, - 3' -> '0-0-, 3' -> '0-0-3, was zum Postfix' 0 0 - 3 - führt. ". Dies ergibt -3, was wahrscheinlich nicht das ist, was wir von -3 erwarten. \ Wenn wir '0-0-3' bekommen könnten, um zum Postfix '0 0 3 - -' zu übersetzen, würde es zu der gewünschten 3 auswerten. –