私は今学期に自分のクラスの 1 つのコンパイラを書いています。シンボル テーブルの実装は機能していますが、その実装には少し不安があります。私は Python でプロジェクトを行っているので、OO アプローチを採用することにしました。私の AST ノードにはすべてaccept
、ビジター パターンを実装する方法があります。私は持っていpreVisit
ますpostVisit
すべてのタイプのノードのメソッドであり、それらを使用して新しいスコープに出入りし、新しいバインディングをテーブルに追加します。それは機能しますが、私のシンボルテーブルが「一時的」であり、このビジタークラスにバインドされているという事実に不安を感じています. シンボル テーブル ビジター クラスをサブクラス化することで型チェックを実装しました。スーパー クラスへの呼び出しを正確に正しい場所に配置するには、細心の注意を払う必要がありました。この実装の脆弱性と、コンパイラのどのフェーズでもビジター クラスと密接に結合する必要があるという事実が、私を不安にさせています。
シンボル テーブルを一般的に実装する方法として、他にどのような方法があるのでしょうか。その情報は純粋に静的なので、AST ノードに直接追加できますか? 一度作成でき、正しいコンテキストでシンボルを検索できるテーブルを作成する方法はありますか? また、純粋関数型プログラマーはこの問題にどのように対処するのでしょうか?