トップ «前の日記(2015-01-02 (Fri)) 最新 次の日記(2015-01-26 (Mon))» 編集

uDiary

海野秀之(うんのひでゆき)の外部記憶

Twitter (twilog) / RSS / アンテナ / ぶくま

2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|

2015-01-12 (Mon)

[Tiger][Haskell] Tiger book 12 章、動作確認&デバッグ開始

FizzBuzz_a

前回 は、レジスタ割付けを人手でやってどうにか動かしたんだが、あれから10章(生存解析)、11章(レジスタ割付け)を経て、晴れて全部コンパイラでできるようになった。

まだ未実装の機能もあり、機能確認もこれからなので、確認済の限られた機能だけをつかって FizzBuzz をやってみた。実行結果のスクリーンショットが上、ソースが下である。なんか、まだ & 演算子を実装してなかったようで、最初の条件を mod3 = 0 & mod5 = 0 のように書いたらうまくいかなかった。

それはそうと、うまくいかないときに「残念ながらアプリは停止しました」しか情報がないのがつらい。

let
  var mod5 := 0
  var mod3 := 0
in
  for i := 1 to 30 do (
    mod5 := i - i / 5 * 5;
    mod3 := i - i / 3 * 3;

    if (mod5 + mod3) = 0 then
      print("FizzBuzz, ")
    else if mod3 = 0 then
      print("Fizz, ")
    else if mod5 = 0 then
      print("Buzz, ")
    else
      (print(toString(i)); print(", "))
   );
   print("...\n")
end

以下、完全に自分むけメモだけど、今日の修正について。

Assem.hs の修正(oper_dst に src も加えた)は、Assem が複数命令を含んでいることによるもの。Assem の外からみると src と dst が干渉していることがわからないので、src が出口生存でないときにハザードを起した。ほんとは、Assem は1命令に対応するように実装すべきだったかも。

MakeGraph.hs はチョンボの修正。新しいラベルが保留中の前方参照を解決するときに、そのラベルと次の命令をただしく継げられていなかった。

この後、以下のように確認・デバッグを進めようかな。

  • 演算、構文をひとつずつ試していく
  • 関数の prelude 部分を実装(まだだったの)
  • 関数呼出し
  • Static link の確認
  • Record, Array

2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|
Categories 3imp | Card | Cutter | Dalvik | Euler | Football | GAE/J | Hand | Haskell | Re:View | Ruby | Scheme | TQD | Tiger | TigerBook読 | UikiTeXi | Verilog | Violin | Web | parconc | tDiary | お勉強 | エントロピー | ツン読 | | 将棋 | 政治について | | 模写してみよう | 確率論 | 設定など | 雑文 | 音声