%{ extern int yylex(); #include #include "proto-color.h" int yyerror (char const *message) { fprintf(stderr,RED("<%s>")"\n", message); return 0; } void print(char *msg) { // fprintf(stderr,BLUE("%s"),msg); } float Table_Symb[26]; %} %error-verbose %union { int entier; float flottant; int index; } %type Expr %token FLOTTANT %token ENTIER %token VAR %token '(' ')' '\n' %right '=' %left '+' '-' %left '*' '/' '%' %% ExprList : /*mot vide */ | ExprList Expr '\n' {printf(" == %f\n", $2);} ; Expr : FLOTTANT {$$=$1;} | ENTIER {$$=(float)$1;} | VAR {$$=Table_Symb[$1];} | VAR '=' Expr { Table_Symb[$1] = $3; printf(" %c <- %f\n", $1+'A', $3); $$=$3; } | '(' Expr ')' { print("()"); $$=$2; } | Expr '+' Expr { print("+"); $$=$1+$3; } | Expr '-' Expr { print("-"); $$=$1-$3; } | Expr '*' Expr { print("*"); $$=$1*$3; } | Expr '/' Expr { print("/"); $$=$1/$3; } | ENTIER '%' ENTIER { print("%"); $$=$1%$3; } ; %% int main(void) { return yyparse(); }