結局、コンパイラのソースをガンガン読んでく感じに。
ghc/compiler/parser/Parser.x
ghc/compiler/parser/Lexer.k
かな? Happy と Alex のパーサ生成器と字句解析器ですね。
だいたい、
data を定義して、それが実装する型classのmethodを書いていく
それを使って関数を書いていく
感じ。さすがに Monad も慣れて
hoge a : x -> y -> Huga a
とか書いてあったら Huga って Monad だから
hoge a x y = do {
z <- ...
y <- ...
; ...
return H z
}
みたいに do 文で書かれるってわけですね。
main の下に HscMain ってのがあり、そこで compiler の要素を順々に呼ぶようです。
deSugar して Core に変換して、それから最適化して、LLVMなりにコンパイルすると。
続きは、日曜日です。
No comments:
Post a Comment