eval.y 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /* -- eval.y --
  2. Evaluation d'une expression
  3. Partie analyseur grammatical.
  4. Utilisation : bison eval.y */
  5. %{
  6. #include <stdio.h>
  7. /* Pré-déclarations */
  8. int yylex (void);
  9. void yyerror (const char *);
  10. /* Variable définie dans un autre fichier */
  11. extern char* yytext;
  12. %}
  13. %defines /* Génère le fichier en-tête eval.tab.h */
  14. %token nombre
  15. %start EXPR_CALCS /* Axiome de la grammaire */
  16. %%
  17. EXPR_CALCS : EXPR_CALC
  18. | EXPR_CALCS EXPR_CALC
  19. ;
  20. EXPR_CALC : EXPR '=' { printf("%d\n", $1); }
  21. ;
  22. EXPR : EXPR '+' EXPR {$$ = $1 + $3;}
  23. | EXPR '-' EXPR {$$ = $1 - $3;}
  24. | FACTOR
  25. ;
  26. FACTOR : nombre {$$ = $1;}
  27. | FACTOR '*' FACTOR {$$ = $1 * $3;}
  28. | FACTOR '/' FACTOR {$$ = $1 / $3;}
  29. | '(' EXPR ')' {$$ = $2;}
  30. ;
  31. %%
  32. #include <stdio.h>
  33. #include "eval.tab.h"
  34. void yyerror (const char * error)
  35. {
  36. fprintf (stderr, "Erreur: %s sur l'expression %s\n", error, yytext);
  37. }
  38. int main() {
  39. if ( yyparse() != 0 ) {
  40. fprintf(stderr,"Syntaxe incorrecte\n"); return 1; }
  41. else
  42. return 0;
  43. }