オフサイドルールの処理 - parse-error(t)って結局なんやったん?

parse-error(t)とか知るかよ、と思ってたんですが、どうもparse-error(t)が無いとまずいような気がしてきた*1。こういうやつが、困る。

let a = 1 in a+1

これは、

let { a = 1 } in a+1

になってほしいわけですが、私の書いたレキサだと、

let { a = 1 in a+1 }

になります。

これはまずいなぁ、とか思って、考えてみたんですが、inの前に閉じ括弧を補うルールって、parse-error(t)に寄るものしかないような気がします。困った。適当にad-hocにinの前に閉じ括弧を補えないか考えてみたんですが、難しそうなので止めました。

let a = 1
in
  a+1

なら大丈夫ですし。

*1:まずいのは当然ですが.どういう場合にまずいのかわかってきた.