JavaScriptでパーザを書くと、どの言語でも、明らかにMapを使って名前のマッピングを変数に格納します。JavaScriptマップのシャドーイング
ほとんどの言語では、内部スコープ内のある変数または別の変数が、外部スコープ内の変数をシャドウすることができます。これを実装する理想的なデータ構造は機能マップです。それがなければ、2つの選択肢があるように思えます。
それは、機能マップであるかのように地図を扱い、アウターマップのコピーを作成し、コピーに内部変数を追加し、それは内側のスコープが終了したときに収集したごみとします。これはエレガントですが、既存の変数を毎回コピーするのにO(N)時間を費やしています。そのため、ある時点で多くの変数が存在する場合は遅くなる可能性があります。
1つのマップを使用して、古いバインディングを保存し、内側のスコープの終わりに復元します。これは高速ですが、控えめでエラーが発生しやすいです。
もっと良いオプションがありますか?どのオプションが最善であるかについてコンセンサスがありますか?
"*明らかにマップを使用して名前のマッピングを変数に格納します*" - なぜですか? – Bergi
パーサーやインタープリタを書いていますか?パーサは実際の変数を格納する必要はありません。 – Bergi
@Bergiまあ、今私は実際に実際の変数を格納する必要があるTPTPファイル形式のパーサーを書いています。 – rwallace