Jonathan Maasland wrote: > /*%%%*/ > $$ = NEW_FCALL($1, 0); > /*% > $$ = method_arg(dispatch1(fcall, $1), arg_new()); > %*/ It's a construct needed for Ripper. For Bison, the code of the first line is normal code, the second is comment. So the relevant part for Bison is: $$ = NEW_FCALL($1, 0); In Ripper, there needs to be different code, so a script preprocesses the whole parse.y, removes the text from /*%%% to /*% and removes the %*/, so the second code line is relevant: $$ = method_arg(dispatch1(fcall, $1), arg_new()); Have a look at ext/ripper/tools/preproc.rb to see how the preprocessing works in detail. Robin Stocker