后缀表达式求值

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;