In article <1043174635.829601.24008.nullmailer / picachu.netlab.jp>,
  matz / ruby-lang.org (Yukihiro Matsumoto) writes:

> 今のCVSでは結局1.6の挙動に戻してます。が、これが良いかという
> と全然納得してないんですけど。

まず、どういう挙動にしたいのかという仕様が問題でしょう。どうもそのへん
がはっきりしないんですよね。

merd の horizontal layout についてはどう思います?
http://merd.net/choices_syntax.html#horizontal_layout

まぁ、そういう仕様の話を無視し、仮に 1.6 の挙動が仕様だとして、それを
もう少しマシに実装するには、というのが

> |おなじようなことをやるにしても、数値リテラル直前の - のトークンを変え
> |て文法で対処すれば少しは自然な処理になると思います。

という話なわけですが。

> もうちょっと具体的にお願いします。ちょっと考えたんですが、よ
> くわかりませんでした。

直後が [0-9.] な - は tNUMUMINUS にして

arg : ...
                | arg tPOW arg
                | tNUMUMINUS tINTEGER tPOW arg
                | tNUMUMINUS tFLOAT tPOW arg
                | ...

numeric         : tINTEGER
                | tFLOAT
                | tNUMUMINUS tINTEGER
                | tNUMUMINUS tFLOAT

というようなのを想定しています。むろんこれは曖昧で shift/reduce
conflict が出るんですが、仕様を実現するには常に shift を選べばいいので、
parse するぶんにはとくに問題ありません。

これがなぜマシかというと、文法だけ取り出しても困んないところが良いわけ
です。parser を再利用しようとすると、ああいう怪しげな所は扱いが難しく
て、例えば xmlize ではなにも対処してないので XML 化した結果を読み込む
プログラムが 1.6 と同様な怪しげなことする必要が出て来ます。おそらく
ripper も同様ですし、Rite に入ると噂される parser module でも事情は同
じかもしれません。というわけでああいう怪しげなところはなくなってくれる
に越したことはない、と思っています。
-- 
[田中 哲][たなか あきら][Tanaka Akira]