/* * postfix.c * * simple postfix expression evaluator. */ #include #include #include int stack [1000]; int top; int eval (char *s); int isop (char op); int pop (void); void push (int a); int do_op (int a, int b, char op); int main (void) { char s [85]; while (gets (s) != NULL) { printf ("%d\n", eval (s)); } return 0; } int eval (char *s) { char *ptr; int first, second, c; ptr = strtok (s, " "); top = -1; while (ptr) { if (isop (*ptr)) { second = pop (); first = pop (); c = do_op (first, second, *ptr); push (c); } else { c = atoi (ptr); push (c); } ptr = strtok (NULL, " "); } return (pop ()); } int do_op (int a, int b, char op) { int ans; switch (op) { case '+': ans = a + b; break; case '-': ans = a - b; break; case '*': ans = a * b; break; } return ans; } int pop (void) { int ret; ret = stack [top]; top--; return ret; } void push (int a) { top++; stack [top] = a; } int isop (char op) { if (op == '+' || op == '-' || op == '*') return 1; else return 0; }