Non ho letto tutto ma 100/100 questa riga è sbagliata, prova a pensare al perché:
codice:
VAR    { yylval.string = strdup(yytext); return VAR; }