%{ #include #define MAXPILE 10 int pile[MAXPILE]; int top = 0; void show(void); %} %% [ \t] {} [\n] { show();} [0-9]+ { if(top== MAXPILE) printf("Depassement de pile\n"); else pile[top++]= atoi(yytext); } "+" { if(top < 2) printf("Pas assez d'arguments\n\n"); else { pile[top-2]=pile[top-2]+pile[top-1]; top--;} } "-" { if(top < 2) printf("Pas assez d'arguments\n\n"); else { pile[top-2]=pile[top-2]-pile[top-1]; top--;} } "*" { if(top < 2) printf("Pas assez d'arguments\n\n"); else { pile[top-2]=pile[top-2]*pile[top-1]; top--;} } "/" { if(top < 2) printf("Pas assez d'arguments\n\n"); else { if(pile[top-1]==0) printf("Division par zero\n\n"); else { pile[top-2]=pile[top-2]/pile[top-1]; top--;} } } "NEG"|"neg" { if(top < 1) printf("Pas assez d'arguments\n\n"); else pile[top-1]= - pile[top-1]; } "DEL"|"del" { if(top < 1) printf("Pas assez d'arguments\n\n"); else top--; } "DUP"|"dup" { if(top < 1) printf("Pas assez d'arguments\n\n"); else pile[top++]=pile[top-1]; } "SWAP"|"swap" { if(top < 2) printf("Pas assez d'arguments\n\n"); else { int aux = pile[top-1]; pile[top-1]=pile[top-2]; pile[top-2]=aux;} } [=] { if(top!=1) printf("Expression mal typee\n"); else printf("Resultat : %d\n",pile[--top]); top = 0; pile[0]=pile[1]=pile[2]=-1;} %% void show(void) { int i; printf("\n Pile: "); for(i =0; i!=top; i++) printf(" %d", pile[i]); printf("\n"); } int main(void) { yylex(); }