\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")

でした。