%{ #define YYERROR_VERBOSE void yyerror(char *); %} %verbose %token '(' ')' ID ';' ILLEGAL_CHAR %right '=' %left '+' %left '*' %% prog: /* empty */ | prog stmt ; stmt: expr ';' | error ';' ; expr: ID | expr '=' expr | expr '+' expr | expr '*' expr | '(' expr ')' | '(' error ')' ; %% void yyerror(char *msg) { printf("\n%s\n", msg); } int main() { return yyparse(); }