%union{ int intero; char* stringa; char carattere; } %token NUM %token STRING %token PAROLA %token CAR %type macro %{ char* macro[100]; %} %% file: /* empty */ | file PAROLA { printf("%s",$2); } | file NUM { printf("%d",$2); } | file assegnazione | file macro { printf("%s",$2); } | file CAR { printf("%c",$2); } | file error ; assegnazione: '%' '[' NUM ']' '=' STRING { macro[$3]=$6; } ; macro: '%' '[' NUM ']' { $$=macro[$3]; } ; %% int yyerror( char *s ) { printf("== %s ==",s); } main () { yyparse(); }