トップ «前の日記(2004-10-10) 最新 次の日記(2004-10-23)» 編集

Rogue Engineer's Diary / やさぐれ日記

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)

2004|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|09|

2004-10-17

[Modern Compiler Implementation in ML] アセンブリコード出力部ほぼ完了

"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様万歳である。

Name / お名前:
E-mail:
Comment / コメント
(To English posters: please do not remove the extra characters in the comment area):
本日のリンク元


福盛秀雄/Hideo Fukumori

Visitors Count: 230(yesterday) / 92(today) / 276392(total)