From: matz@... (Yukihiro Matsumoto) Date: 2002-06-24T12:03:25+09:00 Subject: [ruby-dev:17557] Re: Ruby grammar まつもと ゆきひろです In message "[ruby-dev:17548] Ruby grammar" on 02/06/23, Tanaka Akira writes: |> というか、私も理解してないかも。この機会に文法を見直すか。 | |明確に定義していただけるととてもありがたいですね。 そうですね、この機会に考えましょう。yacc記述のせいでかなり無 視している部分もあるのですが。 |今のところ、ブロックの結合性の話の基本は | |m1 a1, m2 a2, m3 a3, ..., mN aN do end |m1 a1, m2 a2, m3 a3, ..., mN aN {} | |というようにブロックが結び付く可能性のあるメソッド呼び出しが複数ある場 |合、 | |m1 (a1, m2 a2, m3 a3, ..., mN aN) do end |m1 a1, m2 a2, m3 a3, ..., (mN aN {}) | |というように、do end はもっとも左のメソッド呼び出しと結合し、{} はもっ |とも右のメソッド呼び出しと結合するということを意図しているのではないか、 |と理解しています。 そのつもりです。ただ |m1 a1, m2 a2, m3 a3, ..., mN aN {} のaNの形式によっては |m1 a1, m2 a2, m3 a3, ..., (mN aN {}) ではなく、 |m1 a1, m2 a2, m3 a3, ..., mN (aN {}) となりそうな気がします。つまり、{} はもっとも右のメソッド呼 び出しと結合するだけでなく、通常ならローカル変数とみなされる ものまでメソッド呼び出しに解釈する強度(?)があります。 |で、問題は {}, do end が複数ある場合です。単純に左にある {}, do end か |ら上記の結合規則を適用するというようにすると | a 1, b 2 {} {} |が | a (1, (b (2) {})) {} |に解釈されるなど、現在の実装では parse error になるものが許されちゃう |のでなんらかの制約が存在するのは確かなんですが、その制約がいったいど |のようなものかというのが把握できないんですよねぇ。 たぶん、「引数括弧を省略した形式では、かっこでくくらない限り 全体でひとつしかブロックを付与できない」というのが望んでいる 文法ではないかと。「たぶん」というのが情けないですが。 行弘