\r\n
改行コードの正規化がおかしい気がする。
langscan/ocaml/camlexerでは、複数行に渡るトークンを出力するとき、\nを\oとして出力している。これを、LangScan::OCamlで、
input.gsub(/[^\\]\\o/, "\n")
としてもとに戻すわけだが、これだとうまく行かない。
input.gsub(/[^\\]\\o/, "\r\n")
だと良いのだが、\nに置換した場合だと、トークンの終端が少し短くなってしまう。
たぶん、inputとなる文字列全体は、行末を\r\nで正規化してあるけれどもFragment.textは正規化がされていないんじゃないかと思ってみたり。ちょっとgonzuiのコードをのぞいたけど、よくわからないので、とりあえず放置かなーと。MLに言いがかりつけるのも、ちょっとよくわかっていないので不安だし。
(この怪しい動作をする)改行コードの周りのテストくらい書いてから、コミットしようと思っていたが、うまくテストを書けないので、一度コミットしてしまった方がいいのかなあ。
※ちがーう
俺のバグ。正解は
input.gsub(/([^\\])\\o/, '\1'+"\n")
でした。