#include #include "lceb.h" int eval_cell(pos) STACKELT *pos; { STACKELT *prev=pos-1; int curop=pos->curop, nop=pos->nop; int val1, val2; char op; int res; while (curopop[curop]; val2=pos->val; res=-1; printf("eval_cell(%c, %d)\n", op, val2); while ((val1=prev->val) == -1) prev--; switch (op) { case Nop: case End: return val2; break; case Add: res=val1+val2; break; case Mul: res=val1*val2; break; case Sub: if (val1 > val2) res=val1-val2; break; case Div: if (val1 > val2 && (val1 % val2 == 0)) res=val1/val2; break; } curop++; if (res==-1) break; pos->val=res; printf("\t--> eval=%d\n", res); } return res; } int eval_stack(stack) STACK *stack; { int pos, last=stack->last, res; STACKELT *pstack=stack->stack; printf("+++++ eval_stack: addr=%p\n", pstack); for (pos=1; poslast, pstack+pos); res=eval_cell(stack->stack+pos); //printf(" -> val(%d)=%d\n", pos, res); } return res; }