From: Tanaka Akira Date: 2005-08-26T21:03:21+09:00 Subject: [ruby-dev:26892] Re: ripper for 1.8 In article <20050826.092418.1678769501.aamine@loveruby.net>, Minero Aoki writes: >> [:int, "1"] >> [:sp, " "] >> [:op, "+"] >> [:sp, " "] >> [:int, "2"] >> [:sp, " "] >> [:op, "+"] >> [:binary, [:int, "1"], :+, [:int, "2"]] > > レクサで [:op, "+"] を返しているのに、ここで :+ が来ているところです。 > これが伝達されないと、例えば ruby indent みたいのが作りづらくなると > 思うのです。 なるほど。 試しにそこだけちょっと直してみるとこんな感じですかね。 --- ripper.y- 2005-08-26 20:40:58.000000000 +0900 +++ ripper.y 2005-08-26 20:41:20.000000000 +0900 @@ -1587,7 +1587,7 @@ | tLEQ { ifndef_ripper($$ = tLEQ); } | tLSHFT { ifndef_ripper($$ = tLSHFT); } | tRSHFT { ifndef_ripper($$ = tRSHFT); } - | '+' { ifndef_ripper($$ = '+'); } + | '+' { $$ = $1; } | '-' { ifndef_ripper($$ = '-'); } | '*' { ifndef_ripper($$ = '*'); } | tSTAR { ifndef_ripper($$ = '*'); } @@ -1803,7 +1803,7 @@ #if 0 $$ = call_op($1, '+', 1, $3); #endif - $$ = dispatch3(binary, $1, ID2SYM('+'), $3); + $$ = dispatch3(binary, $1, $2, $3); } | arg '-' arg このくらいなら全部やればいいんじゃないの、と一瞬思ったのですが、 $$ = dispatch2(alias, $2, $4); とか、渡してないのがあるんですねぇ。 > # ただそれを言うなら今は捨ててる tSTAR や ',' の値も全部 dispatch > # しないといけないことになるのですが、それはちょっとダルいなあと…… まぁ、全部のトークンを含めると構造が増えそうですね。 -- [田中 哲][たなか あきら][Tanaka Akira]