みなさん、こんにちは。現在、学習体験のための簡単なプログラミング言語を実装していますが、アドバイスが必要です。現在、通訳者を設計していますが、問題が発生しました。
私の言語はCのサブセットであり、スタックインタープリターの実装に関して問題があります。この言語では、以下がコンパイルされます。
somefunc ()
{
1 + 2;
}
main ()
{
somefunc ();
}
これで問題ありませんが、「1 + 2」が計算されると、結果がスタックにプッシュされ、関数が返されますが、スタックにはまだ数値があり、存在しないはずです。この問題を回避するにはどうすればよいですか?
関数呼び出しの前にスタックの「状態」を保存し、関数呼び出しの後に「状態」を復元することを考えました。たとえば、スタック上の要素の数を保存し、関数コードを実行して戻り、以前と同じ要素数になるまでスタックからポップします(または、関数が何かを返した場合は+1になる可能性があります)。
何か案は?ヒントをありがとう!