12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /* -- 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 : EXPR '+' EXPR {$$ = $1 + $3;}
- | EXPR '-' EXPR {$$ = $1 - $3;}
- | FACTOR
- ;
- FACTOR : nombre {$$ = $1;}
- | FACTOR '*' FACTOR {$$ = $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;
- }
|