%{ #include #include int yylex(); int yyerror(char *); %} %token NUM ADD SUB MUL DIV LPAR RPAR %left ADD SUB MUL DIV %right NEG %% S: E { printf("\n"); }; E: E ADD E { printf("+ "); } | E MUL E { printf("* "); } | E SUB E { printf("- "); } | E DIV E { printf("/ "); } | LPAR E RPAR | SUB E %prec NEG { printf("- "); } | NUM { printf("%d ", yylval); } ; %% int main() { yyparse(); } int yyerror(char *s) { printf("error: %s", s); exit(0); }