自作言語 oak その5 (symbol lookup/access)
自作言語 oak の関門の一つであるシンボルルックアップとシンボルアクセスが95%実装できた。
シンボルルックアップ : 現在いるスコープから、識別子を検索する。検索の仕方は次の通り。
1. 現在いるスコープから、スコープをうなぎのぼりし、識別子がそのスコープ内で宣言されているか探す。つまり最内のシンボルを見つける。
2. もし見つからなかったら、現在いるスコープからインポートされているモジュールをすべて集め、各モジュールについて現在いるスコープからそのモジュールのその識別子にアクセス(後述)する。この過程で複数見つかることもある。
シンボルアクセス : 現在いるスコープから、シンボルのメンバーにアクセスする。当然 private, package, public, protected
といったプロテクションレベルも考慮しなければならない。うち、package(pkgname)
も未実装。これが残りの 5%。
この他にも import public MyModule
による循環参照を避けることも考える必要があったが、無限ループに陥ることなく正しく実装できた(はず)。
備忘録として、Scope
と ScopeSymbol
は互いにリンクを持っており、ScopeSymbol.enclosing : Scope
で上と繋がれる。