Home » Tutorials » Sonstiges » Funktionsinterpreter

Funktionsinterpreter

Die Grundidee

Um die Grundidee zu verstehen, betrachten wir den Term 4 – 7 * 8 + sqrt(4). In UPN ergibt sich der Term 4 7 8 * – 4 sqrt +.
Wir arbeiten den Term von vorne ab.
Die 4 schieben wir dazu zunächst auf unseren Stack. Auch die nachfolgende 7 und 8 schieben wir auf den Stack, da es sich um Zahlen handelt. Nun kommt der erste Operator, die Multiplikation. Dazu holen wir die letzten beiden Zahlen vom Stack (das wären die 7 und die 8), multiplizieren sie miteinander und schieben das Ergebnis 56 wieder zurück auf den Stack. Der nächste Operator, den wir lesen, ist ein Minus. Wir holen also die letzten beiden Operanden vom Stack (die 56 und die 4) und subtrahieren sie. Das Ergebnis ist -52 und landet wieder auf dem Stack.
Das nächste Symbol ist wieder eine Zahl (die 4) und landet dementsprechend umgehend auf dem Stack. Anschließend kommt wieder ein Operator, in diesem Fall Sqrt (Wurzel). Wir nehmen uns das letzte Objekt auf dem Stack (also die 4), berechnen die Wurzel davon (2) und schieben das Ergebnis wieder auf dem Stack. Das letzte Symbol, das wir erhalten, ist der Operator Plus. Zu diesem Zweck holen wir die letzten beiden Operanden vom Stack (die -52 und die 2), addieren sie und schieben das Ergebnis wieder auf den Stack. Damit sind wir fertig.
Das endgültige Ergebnis liegt nun auf dem Stack – hier ist es die -50. Wenn alles richtig gelaufen ist, dann ist das Ergebnis auch die einzige Zahl, die noch auf dem Stack liegt.
Dieses Vorgehen ist die eigentliche Grundidee, die sich hinter unserem Interpreter verstecken wird. Wir werden den Interpreter zusätzlich noch um die Möglichkeit erweitern, der interpretierenden Methode einen Wert für x mit zu liefern, so dass das Symbol ‚x‘ beim Interpretieren durch x ersetzt wird.