俺言語とセミコロン
セミコロンを省略できるようにと,パーサと悪戦苦闘をしたあげく,スキャナ側で不要な改行を削るようにしてみたのだが,どうにも上手くいかなかったので,RHGのパーサの部分を読んでみた.
スキャナで処理するところまではよかったのに,その後の爪が甘かったらしい.
基本的にはセミコロンを省いても動作するようになった.
いまのところ,カッコのバランスはみていないので
a = ( 5 ) // ok: a = (5);と等価 b = ((5 + 2) * 3) // ng: b = ((5; +2)*3); と解釈される
となってしまう.
'('は文の最後(の1つ前の終端記号)にならないので,改行はスキャナで削除されるけど,'5'は文の最後になりえるので,改行がパーサに渡されてしまう.
'('と対応する')'を数えれば式の途中であることは自明なので,改行を取り除くことが出来る…ということをrubyはやっているらしい.
四則演算とかのネット上によくあるパーサの説明と違って,本物のソースは勉強になる.