【习题答案】第07章 语义分析与中间代码生成.pdfVIP

  • 19
  • 0
  • 约2.63千字
  • 约 3页
  • 2017-06-02 发布于河南
  • 举报

【习题答案】第07章 语义分析与中间代码生成.pdf

【习题答案】第07章 语义分析与中间代码生成

《编译原理》课后练习参考答案 第07 章 语义分析与中间代码生成 课后练习参考答案 第07 章 语义分析与中间代码生成 1. 将下列语句翻译为逆波兰表示(后缀式)、三元式和四元表示: a:=(b+c)*e+(b+c)/f 【解题思路】 把中缀式转换为后缀式的简单方法:按中缀式中各运算符的优先规则,从最先执行的部 分开始写,一层层套。如a≤b+c∧a>d∨a+b≠e,先把b+c 写为bc+;然后把a≤套上去, 成为abc+≤;再把a>d 表示为ad>;然后把∧套上去,成为abc+≤ad>∧,依此类推。 四元式由4 个部分组成:算符op、第1和第2运算量arg1 和arg2,以及运算结果result。 运算量和运算结果有时指用户自定义的变量,有时指编译程序引进的临时变量。如果 op 是 一个算术或逻辑算符,则result 总是一个新引进的临时变量,用于存放运算结果。 三元式只需3 个域:op、arg1 和arg2。与四元式相比,三元式避免了临时变量的填入, 而是通过计算这个临时变量的语句的位置来引用这个临时变量。我们很容易把一个算术表达 式或一个赋值句表示为四元式序列或三元式序列。 【解】 逆波兰表示为: bc+e*bc+f/+:= 三元式序列为: (1)(+,b,c) (2)(* ,(1) ,e) (3)(+ ,b,c) (4)(/ ,(3) ,f) (5)(+ ,(2) ,(4)) (6)(:= ,a,(5)) 四元式序列为: (1)(+ ,b,c,T1) (2)(* ,T1,e,T2) (3)(+ ,b,c,T3) (4)(/ ,T3,f,T4) (5)(+ ,T2,T4,T5) (6)(:= ,T5, ,a) 共3 页,第1 页 《编译原理》课后练习参考答案 第07 章 语义分析与中间代码生成 2. 将下列C程序的执行语句翻译成三地址代码(设 S.next 为 L0): if ( i j ) s = 10 * s ; else i = - j ; 【解】 翻译结果如下: if i j goto L1 goto L2 L1: t0 = 10 * s s = t0 goto L0 L2: t1 = - j i = t1 L0: ... 3. 给出下面表达式的逆波兰表示(注:用¥表示 if-then-else 运算): if (x+y)*z=0 then s:=(a+b)*c else s:=a*b*c 【解】 逆波兰式为:xy+z*0=sab+c*:=sab*c*:=¥ 4. 写出下列语句的四元式序列:(假设地址从 100 开始) WHILE AC AND BD DO IF A=1 THEN C:=C+1 ELSE WHILE A=D DO A:=A+2; 【解】 (100) (j,A,C,102)

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档