私はコンパイラの作成に取り組んでおり、シンボル テーブルを実装する 2 つの異なる方法を示唆するテキストに出くわしました。1 つの場合、スタックに格納されるネストのレベルごとにシンボル テーブルがあります。2 番目のオプションでは、シンボル テーブルは 2 つしかありません。1 つのシンボル テーブルはすべてのエントリを維持するために構築され、もう 1 つはプライマリ テーブルへの変更を追跡するために使用されます。その特定のブロック。これらのさまざまな実装の長所と短所は何ですか? 個々のブロックのシンボルテーブルを削除する限り、最初のオプションの方が高速になると確信していますが、これにはいくらかのオーバーヘッドが伴います (これについては不明です)。2 つ目は、多くの宣言を含む大きなブロックを削除する場合に限り、明らかにリソースを大量に消費します。