%{ #include #include extern FILE *yyin; %} %union { double nombre; } %token NOMBRE %token ERREUR %type terme expression %% calcul: expression { printf("= %g\n", $1); } ; expression: terme { $$ = $1; } | '+' terme { $$ = $2; } | '-' terme { $$ = -2; } | terme '+' terme { $$ = $1 + $3; } | terme '-' terme { $$ = $1 - $3; } | terme '*' terme { $$ = $1 * $3; } | terme '/' terme { $$ = $1 / $3; } ; terme: '(' expression ')' { $$ = $2; } | NOMBRE { $$ = $1; } ; %% int yyerror(char *msg) { printf("ERROR: %s\n", msg); return 0; } int main(void) { yyin = stdin; yyparse(); }