1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
OperandType EvaluateExpression() { InitStack(OPTR); Push(OPTR, '#'); InitStack(OPND); c = getchar(); while(c != '#' || GetTop(OPTR) != '#') { if(! In(c, OP)) { Push(OPND, c); c = getchar(); } else { switch(Precede(GetTop(OPTR), c)) { case '<': Push(OPTR, c); c = getchar(); break; case '=': Pop(OPTR, x); c = getchar(); break; case '>': Pop(OPTR, theta); Pop(OPND, b); Pop(OPND. a); Push(OPND, Operate(a, theta, b)); break; } } } return GetTop(OPND); }
|