パーサ(構文解析)と字句解析の都合ですね。 適切なエラー出すのって結構難しくて、まあその辺が品質なんだけど。 パーサは字句解析から token を貰うんだけど、字句解析は字句解析で勝手に行数カウントしたりするから、18行目の最後のtokenが行末で区切られてる場合、行末が来た時点で「現在行」は19行目ということになり、パーサは 18 行目の token を処理してるのに、現在行は 19 行目ってなってたりする。 他の言語でもありがちです。