ab+c*的求值(a=1,b=3,c=5) 13+5 米 5*4=20 计算完毕,结果为20
a进栈 1 3 + 5 * ab相加,移去两项,和置于栈顶 b进栈 3+1= 4 栈顶两项相乘,移去两项,积置于栈顶 c进栈 5*4= 20 计算完毕,结果为20
给出下列表达式的逆波兰式: 1.-a+b*c 2.a*(-b+c)
给出下列表达式的逆波兰式: 1. –a+b*c 2. a*(-b+c)
后缀式的控制流 前面讲到,if-then-else运算符的实现”exy?” →e不等于0,取x,否则取y. 这种表示法要求在任何情况下都要把x,y都计算 出来,尽管只用到其中一个。而且,如果运算量 无定义或者有副作用,则后缀表示法不仅无效, 而且可能是错误的
前面讲到,if-then-else运算符的实现”exy?” → e不等于0,取x,否则取y. 这种表示法要求在任何情况下都要把x,y都计算 出来,尽管只用到其中一个。而且,如果运算量 无定义或者有副作用,则后缀表示法不仅无效, 而且可能是错误的
解决方案 引入标号,在后缀式中加入条件转移,无条件转 移算符。 存储方式 后缀式存放在一维数组POST[1..N]中,每个元素 是运算符或者分量(指向符号表)
引入标号,在后缀式中加入条件转移,无条件转 移算符。 存储方式 后缀式存放在一维数组POST[1..N]中,每个元素 是运算符或者分量(指向符号表)
转移算符 p jump→转到POST[p] e1e2pjlt→el<e2时,转到P0ST[p] e p jez→若e=0,转到POST[p] If e then x else y → e pl jez x p2 jump pl:y p2:
p jump → 转到POST[p] e1 e2 p jlt → e1<e2时,转到POST[p] e p jez → 若e=0,转到POST[p] If e then x else y → e p1 jez x p2 jump p1:y p2: 转移算符