パーサかませばなんでもありだな…… %{ #include <stdio.h> #include <string.h> %} %union { char *str; } %token X %token <str> STRING %type <str> face mouths left_part right_part mouth %% sayhello: face '<' STRING '!' { fputs($1, stdout); fputc(' ', stdout); fputs($3, stdout); fputc('!', stdout); fputs("\n", stdout); free($1); } face: left_part mouths right_part { $$ = malloc(strlen($1) + strlen($2) + strlen($3) + 1)