/* Compilation d'expressions arithme'tiques on genere du code a utiliser avec etf.lex qui reconnait les differents terminaux NUMBER: nombre entier, PARO PARF: parentheses, MULT PLUS multiplication addition , POINTV point virgule, ID identificateur (ne sert pas ici) */ %{ #define YYSTYPE char* int numregistre = 0; %} %token NUMBER PLUS POINTV MULT PARO PARF ID EGAL MOINS DIV %% statement : expression POINTV ; expression : expression PLUS terme { printf("add R%d R%d\n", numregistre-1, numregistre); numregistre--;} | terme {$$ = $1;} ; terme : terme MULT facteur { printf("mult R%d R%d\n", numregistre-1, numregistre); numregistre--;} | facteur {$$ = $1;} ; facteur : ID {numregistre++; printf("load %s R%d\n", $1, numregistre);} | PARO expression PARF {$$ = $2;} ; %% #include "lex.yy.c" main() { yyparse(); } yyerror(char *s) { printf ("%s\n",s); }