后缀表达式求值
1. 操作数入栈
以后缀表达式 2 3 + 4 * 为例。扫描到操作数时直接入栈。
2
3
+
4
*
2
if (token is operand) {
Push(&stack, token.value);
}
2. 运算符弹出两个操作数
扫描到 + 时,先弹出右操作数,再弹出左操作数。
2
3
+
4
*
2
3
Pop(&stack, &right);
Pop(&stack, &left);
result = left + right;
3. 结果再入栈
2 + 3 = 5,把结果压回栈,继续扫描后面的 token。
2
3
+
4
*
5
4
Push(&stack, result);
4. 最后栈顶就是结果
扫描到 *,计算 5 * 4,最终结果为 20。
2
3
+
4
*
20
Pop(&stack, &result);
return result;