PEG

nishiohirokazu2007-11-24

あー。なんかトークン間のスペースを明示的に指定しないと行けない点をけなされるPEGだけど、それはトークンの区切り方が「一番メジャーな方法一つに決めうち」ではない、という逆の見方もできるんだ。

というのは、今見ていたPEGによるPEGの定義では、コメントや改行を区切りに含めていた。それもすごくシンプルでわかりやすく書ける。

Spacing <- (Space / Comment)*
Comment <- ’#’ (!EndOfLine .)* EndOfLine
Space <- ’ ’ / ’\t’ / EndOfLine
EndOfLine <- ’\r\n’ / ’\n’ / ’\r’

式を書いていて長くなってくると、適宜折り返してコメントをつけて見やすくしたくなるよね。そういうことが簡単にサポートできる。yaccとかでどうやってやるのかは僕は詳しくないけども、下のような式はRubyで-3を返すので、きっと実装が難しいんだと思う。

x = (1 
  - 2 
  - 3)

JavaScriptPythonPerlは正しく-4を返した。