/* -- eval.y -- Evaluation d'une expression Partie analyseur grammatical. Utilisation : bison eval.y */ %{ #include /* Pré-déclarations */ int yylex (void); void yyerror (const char *); /* Variable définie dans un autre fichier */ extern char* yytext; %} %defines /* Génère le fichier en-tête eval.tab.h */ %token nombre %start EXPR_CALCS /* Axiome de la grammaire */ %% EXPR_CALCS : EXPR_CALC | EXPR_CALCS EXPR_CALC ; EXPR_CALC : EXPR '=' { printf("%d\n", $1); } ; EXPR : EXPR '+' EXPR {$$ = $1 + $3;} | EXPR '-' EXPR {$$ = $1 - $3;} | FACTOR ; FACTOR : nombre {$$ = $1;} | FACTOR '*' FACTOR {$$ = $1 * $3;} | '(' EXPR ')' {$$ = $2;} ; %% #include #include "eval.tab.h" void yyerror (const char * error) { fprintf (stderr, "Erreur: %s sur l'expression %s\n", error, yytext); } int main() { if ( yyparse() != 0 ) { fprintf(stderr,"Syntaxe incorrecte\n"); return 1; } else return 0; }