1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /* -- eval.y --
- Evaluation d'une expression
- Partie analyseur grammatical.
- Utilisation : bison eval.y */
- %{
- #include <stdio.h>
- /* 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 : TERM
- | EXPR '+' TERM {$$ = $1 + $3;}
- | EXPR '-' TERM {$$ = $1 - $3;}
- ;
- TERM : FACTOR
- ;
- FACTOR :
- | nombre {$$ = $1;}
- | EXPR '*' TERM {$$ = $1 * $3;}
- | '(' EXPR ')' {$$ = $2;}
- ;
- %%
- #include <stdio.h>
- #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;
- }
|