海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
少し間が空いてしまった。まだ7章。
https://github.com/unnohideyuki/Tiger-in-Haskell
Frame.Frag を定義、Semant.transDec では [TL.Exp] や [Frame.Frag] を出力するようにし、LetExp の処理では [TL.Exp] を変数初期化式として用いるように。
[Frags] は、transDec の出力に加えるだけでは不十分で、transExp, transDec がつねに引き回さないといけない(状態)。
つぎは、[Frags] を状態として引き回す改造から、ソース部分としてのつづきは trexp for ArrayExp のあたりから続き。
また、Alex で Unicode を扱う方法についても、少し調べた。
Alex 3.x では UTF-8 を自然に扱えるようになっている。GHC のコードでは、Alex 2.x との互換性のために、getChar のなかで種別を判定して、種別ごとに「つぶした」値を返すようなトリックが用いられている。
Alex 3.x では、そのようなトリックは使わなくてもいいが、$uniwhite などを自前で定義してやらないといけない。
手で書いてはいられないので、生成するプログラムを書いた。
(unicateg.hs, まだローカルにしかない)
Lex.x にコピペで埋め込むのは可読性を下げるので、include しよう。少し不本意だけど cpp -P する。