With Bison, I figured out how to get everything into one long string as follows:
arg_list: WORD arg_list { strcat( $1, \"IFS\" ); $$ = strcat($1, $2); }
%union { char *char_ptr; } %token STRING %type STRING string %% ... string: STRING /* Lexic analyzer return STRING and set yylval = yytext; */ | string STRING { char *str = (char*) malloc(strlen($1) + strlen($2) + 1); strcpy(str, $1); strcat(str, $2); free($2); free($1); $$ = str; } ; %%