自作言語 oak その5 (symbol lookup/access)

自作言語 oak の関門の一つであるシンボルルックアップとシンボルアクセスが95%実装できた。

シンボルルックアップ : 現在いるスコープから、識別子を検索する。検索の仕方は次の通り。

1. 現在いるスコープから、スコープをうなぎのぼりし、識別子がそのスコープ内で宣言されているか探す。つまり最内のシンボルを見つける。
2. もし見つからなかったら、現在いるスコープからインポートされているモジュールをすべて集め、各モジュールについて現在いるスコープからそのモジュールのその識別子にアクセス(後述)する。この過程で複数見つかることもある。

シンボルアクセス : 現在いるスコープから、シンボルのメンバーにアクセスする。当然 private, package, public, protected といったプロテクションレベルも考慮しなければならない。うち、protected については class がまだできていないのでやりようがなく、未実装。また、package(pkgname) も未実装。これが残りの 5%。

この他にも import public MyModule による循環参照を避けることも考える必要があったが、無限ループに陥ることなく正しく実装できた(はず)。

備忘録として、ScopeScopeSymbol は互いにリンクを持っており、ScopeSymbol.enclosing : Scope で上と繋がれる。