eval.d

評価器クラスが定義されている。visitorパターンではないけど、visitorパターンっぽいことを実現している。

evalメソッドが面白いところだ。
メソッドの型とクラスの型をチェックして対応する型のeval_メソッドを呼び出している。
いちいち、visitor,acceptせずに書けてるのがいい感じ。
C++ではここまでシンプルに書けないのではないかと思う。
詳しく見てないのでよくわかりませんけど。

関数型言語なら関数とマッチングで解決するところをクラス1つとメソッドが複数という形でまとめられている。
抽象クラスを継承することが求められるので網羅性チェックが確実にできている。
ここでは、色々なレイヤーの評価器があって面白い。

ASTのタイプ名が3文字なのがもしかしたら、AdaScriptの影響かな?って思ったりする。

マクロレイヤーもここで定義されている。
ユニットテストも書いてある。すばらしい。俺はテストをめんどくさがるからなぁ。ちゃんとテストを書くことは大切だよなぁット思う。

評価の内容もしっかり見たいところだけど、まずは大枠を把握した
いので次に進む。
evalString,evalFileが読んでいるparse関連を読んでいこう。