Hallo zusammen, ich bin gerade dabei, eine einfache Programmiersprache zu implementieren, um Erfahrungen zu sammeln, aber ich brauche einen Rat. Ich bin gerade dabei, meinen Interpreter zu entwerfen und bin auf ein Problem gestoßen.
Meine Sprache ist eine Untermenge von C und ich habe ein Problem mit der Implementierung des Stack-Interpreters. In der Sprache wird die folgende kompilieren:
somefunc ()
{
1 + 2;
}
main ()
{
somefunc ();
}
Das ist in Ordnung, aber wenn "1+2" berechnet wird, wird das Ergebnis auf einen Stapel geschoben, und dann kehrt die Funktion zurück, aber es ist immer noch eine Zahl auf dem Stapel, und das sollte nicht sein. Wie kann ich dieses Problem umgehen?
Ich habe darüber nachgedacht, einen "Zustand" des Stacks vor einem Funktionsaufruf zu speichern und diesen "Zustand" nach dem Funktionsaufruf wiederherzustellen. Zum Beispiel die Anzahl der Elemente auf dem Stack zu speichern, dann den Funktionscode auszuführen, zurückzukehren und dann vom Stack zu popen, bis wir die gleiche Anzahl von Elementen wie vorher haben (oder vielleicht +1, wenn die Funktion etwas zurückgegeben hat).
Irgendwelche Ideen? Danke für jeden Tipp!