/* Compilation d'expressions arithme'tiques on genere le nombre minimal de registres a utiliser avec exo1.lex qui reconnait les differents terminaux PARO PARF: parentheses, MULT PLUS multiplication addition, MOINS DIV soustraction division (non utilisés ici), EGAL egalite (non utilisés ici), POINTV point virgule, ID identificateur */ %union { char *expr; int nbRegistres; } %token NUMBER PLUS POINTV MULT PARO PARF ID EGAL MOINS DIV %type statement expression terme facteur %% statement : expression POINTV { printf("Nombre de registres nécessaires : %d\n",$1); } ; expression : expression PLUS terme { $$ = max(min($1,$3)+1,max($1,$3)); } | terme { $$ = $1; } ; terme : terme MULT facteur { $$ = max(min($1,$3)+1,max($1,$3)); } | facteur { $$ = $1; } ; facteur : ID { $$ = 1; } | PARO expression PARF { $$ = $2; } ; %% #include "lex.yy.c" int max(int a, int b) { return (a>b) ? a : b; } int min(int a, int b) { return (a