编译原理第八章习题
一、 问答题
问答第1题
给出下面表达式的逆波兰表示(后缀式):
(1)a*(-b+c)
(2) if(x+y)*z=0 then s∶=(a+b)*c else s∶=a*b*c
问答第2题
请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。
问答第3题
采用语法制导翻译思想,表达式E的"值"的描述如下:
产生式 语义动作
(0) S′→E {print E.VAL}
(1) E→E
1
+E
2
{E.VAL∶=E
1
.VAL+E
2
.VAL}
(2) E→E
1
*E
2
{E.VAL∶=E
1
.VAL*E
2
.VAL}
(3) E→(E
1
) {E.VAL∶=E
1
.VAL}
(4) E→n {E.VAL∶=n.LEXVAL}
假如终结符n可以是整数或实数,算符+和*的运算对象类型一致,语义处理增加"类型匹配检查",请给出相应的语义描述。
问答第4题
请将下列语句
while (A<B do if (C>D) then X:=Y+Z
翻译成四元式