eval.y 1001 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. | '(' EXPR ')' {$$ = $2;}
  29. ;
  30. %%
  31. #include <stdio.h>
  32. #include "eval.tab.h"
  33. void yyerror (const char * error)
  34. {
  35. fprintf (stderr, "Erreur: %s sur l'expression %s\n", error, yytext);
  36. }
  37. int main() {
  38. if ( yyparse() != 0 ) {
  39. fprintf(stderr,"Syntaxe incorrecte\n"); return 1; }
  40. else
  41. return 0;
  42. }