Friday, 23 November 2018

GHC 読み会

結局、コンパイラのソースをガンガン読んでく感じに。

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: