私は現在、グローバル変数とネストされたサブルーチン機能を持つ言語用のコンパイラを構築しています。以前は、ネストされたサブルーチンのないローカル変数のみを持つ言語用のコンパイラしか構築していませんでした。
コード生成フェーズのセマンティック解析フェーズで埋められたシンボル テーブルを再利用する方法に問題があります。リンク リストのスタックとしてシンボル テーブルを作成します。各リンク リストは、特定のスコープで宣言された識別子を表します。スコープに入るたびに、新しいリストが作成されてスタックにプッシュされ、現在のスコープになります。同様に、スコープを離れるたびに、スタックの一番上のリストがポップされます。最終的に、意味解析が終了すると、開始時と同じように、実質的に空のシンボル テーブルができます。ただし、コード ジェネレーターは、コードを正しく生成するために、完全に埋められたシンボル テーブルを必要とします。意味解析中に行われたこと (つまり、記号テーブルへの識別子の入力) をやり直すことなく、これを行うにはどうすればよいでしょうか?