exp += '#';
oprStack.push('#');
while ( getToken(exp, tok) ) {
if (tok.isNum) { // the token is a number
numStack.push(tok.num);
} else { // the token is a operator
char res;
double x, y, z;
do {
res = Compare(oprStack.top(), tok.opr);
switch (res) {
case '>': x = numStack.top();
numStack.pop();
y = numStack.top();
numStack.pop();
z = Calculate(y, x, oprStack.top());
numStack.push(z);
oprStack.pop();
break;
case '<': oprStack.push(tok.opr);
break;
case '=': oprStack.pop();
break;
case 'R': return numStack.top();
case 'E': error("Bad Input.");
}
} while (res == '>');
}
}
return numStack.top();
}