PEG
あー。なんかトークン間のスペースを明示的に指定しないと行けない点をけなされるPEGだけど、それはトークンの区切り方が「一番メジャーな方法一つに決めうち」ではない、という逆の見方もできるんだ。
というのは、今見ていたPEGによるPEGの定義では、コメントや改行を区切りに含めていた。それもすごくシンプルでわかりやすく書ける。
Spacing <- (Space / Comment)* Comment <- ’#’ (!EndOfLine .)* EndOfLine Space <- ’ ’ / ’\t’ / EndOfLine EndOfLine <- ’\r\n’ / ’\n’ / ’\r’
式を書いていて長くなってくると、適宜折り返してコメントをつけて見やすくしたくなるよね。そういうことが簡単にサポートできる。yaccとかでどうやってやるのかは僕は詳しくないけども、下のような式はRubyで-3を返すので、きっと実装が難しいんだと思う。
x = (1 - 2 - 3)
JavaScriptとPythonとPerlは正しく-4を返した。