海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
shift/reduce conflicts: 128 → 72
reduce/reduce conflicts: 151 → 57
ずいぶん減らしたけど、まだまだあるなぁ。
自分でてきとうに書いた文法を 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 ()
よしよし。スバラシイ。
この調子で、今週中に抽象構文木をつくるところまではいってしまおう。
ふふふ。次はいよいよ型推論(または型再構築)であーる。