%{ 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); } %} %error-verbose %union { int entier; } %type Expr %token ENTIER %token '\n' '+' '-' '*' '/' '%' '(' ')' %% ExprList : /*mot vide */ | ExprList Expr '\n' {printf(" == %d\n", $2);} ; Expr : ENTIER { print("Val"); $$=$1; } | '(' Expr '+' Expr ')' { print("+"); $$=$2+$4; } | '(' Expr '-' Expr ')' { print("-"); $$=$2-$4; } | '(' Expr '*' Expr ')' { print("*"); $$=$2*$4; } | '(' Expr '/' Expr ')' { print("/"); $$=$2/$4; } | '(' Expr '%' Expr ')' { print("%"); $$=$2%$4; } ; %% int main(void) { return yyparse(); }