Categories |
CPUの創りかた |
Modern Compiler Implementation in ML |
NerdTV |
PDP-11シミュレータで古代のUNIXを動かしてみる |
The Yakumo Project |
やさぐれ読書録
最近のツッコミ:1.Dominic(2008-06-23 05:05)
2.CheapestCheapOEMoem(2008-06-17 03:00)
3.NewDownloadCreativAdobOEM(2008-06-12 20:00)
最近のトラックバック:1.濃縮還元オレンジニュース:プロ.. (2006-12-22 22:02)
"mciML"はアセンブリコード出力部の実装がほぼ完了。ちゃんと"Maximal Munch"が出来ているかについてはイマイチ自信がない(ついでにちゃんとアセンブリコードが出ているかもイマイチ自信がない)が、困ったら後で直せばいいということで(いきあたりばったりに)決着。
ついでに、放っておいたままであった(アセンブリコード出力以外の)細かなコードも実装。こちらはTiger言語の標準関数を定義している部分。
val base_venv =
foldl (fn((lname,fmls,res),tbl)
=> S.enter(tbl,S.symbol(lname),
FunEntry{level=Translate.outermost,
label=Temp.namedlabel lname,
formals=fmls,
result=res}))
S.empty [("print",[T.STRING],T.UNIT),
("flush",[],T.UNIT),
("getchar",[],T.STRING),
("ord",[T.STRING],T.INT),
("chr",[T.INT],T.STRING),
("size",[T.STRING],T.INT),
("substring",[T.STRING,T.INT,T.INT],T.STRING),
("concat",[T.STRING,T.STRING],T.STRING),
("not",[T.INT],T.INT),
("exit",[T.INT],T.UNIT)]
ML様が提供する型推論のおかげで、こんな風に入り組んだコードも楽に書ける。少々間違ってもML様の出してくれるエラーメッセージに従ってコードを修正してやればたちどころに解決。素晴らしい。ML様の出すエラーメッセージがときどき意味不明なので苦労しているとか、無駄にアクロバティックなコードを書いている、などということは決してない。ML様万歳である。