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

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-02-03 (Tue)

[Haskell][Hand] Parser.y つづき

shift/reduce conflicts:  128 → 72
reduce/reduce conflicts: 151 → 57

ずいぶん減らしたけど、まだまだあるなぁ。

[Haskell][Hand] Parser.y

自分でてきとうに書いた文法を LALR(1) に書き直すのは大変っぽかったので、
自分で一度かいたら読めるようになった GHC の Parser.y を有難く参考にさせていただくことにした。

おかげさまで、↓このとおり。ありがたい!

$ happy -i src/Parser.y
shift/reduce conflicts:  12

どうしてこう書くとよいのか、こう書かねばならないのかは、おいおい理解したい。

んでもって、このままではレイアウト規則の最後の1ピースがはまっていないので、構文エラーになる。

$ src/Parser < testcases/test1.hs 
Left "parseError: TVCCurly (AlexPn 588 17 1)"

でもって、エラートークンがきたらコンテキストを pop するようにしてやると、

-- Layout ---------------------------------------------------------------------
close: vccurly                                  {}
     | error                                    {% popCtx }

$ src/Parser < testcases/test1.hs 
Right ()

よしよし。スバラシイ。

この調子で、今週中に抽象構文木をつくるところまではいってしまおう。

ふふふ。次はいよいよ型推論(または型再構築)であーる。


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 | お勉強 | エントロピー | ツン読 | | 将棋 | 政治について | | 模写してみよう | 確率論 | 設定など | 雑文 | 音声