编译原理第八章习题

一、 问答题

问答第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→E1+E2    {E.VAL∶=E1.VAL+E2.VAL}
  (2) E→E1*E2    {E.VAL∶=E1.VAL*E2.VAL}
  (3) E→(E1)     {E.VAL∶=E1.VAL}
  (4) E→n      {E.VAL∶=n.LEXVAL}
  假如终结符n可以是整数或实数,算符+和*的运算对象类型一致,语义处理增加"类型匹配检查",请给出相应的语义描述。


问答第4题
  请将下列语句
  while (A<B do if (C>D) then X:=Y+Z
  翻译成四元式