编译原理第18讲(第八章).ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 语义分析 8.3 中间代码生成 8.3.3 简单说明语句的翻译 简单说明语句的属性文法 过程中的说明语句的属性文法 8.3.4 布尔表达式的翻译 布尔表达式的翻译举例 8.3.5.2 控制语句结构的属性文法 “拉链”与“回填”技术 “拉链”的例子 “回填”的例子 布尔表达式翻译需要的语义元素: 符号表 name type def add … L label not r (p) goto 0 … (q) goto p … (r) goto q 定义标号语句的产生式 S→label S label→i: 那么,当用label→i:进行归约时,应做如下的语义动作: 1.若i所指的标识符(假定为L)不在符号表中,则把它填入,置“类型”为“标号”,“定义否”为“已”,“地址”为nextstat。 2.若L已在符号表中但“类型”不为“标号”或“定义否”为“已”,则报告出错。 3.若L已在符号表中,则把标志“未”改为“已”,然后,把地址栏中的链首(设为q)取出,同时把nextstat填在其中,最后,执行backpatch(q,nextstat)。 翻译goto语句时,还有两点必须注意 第一:相同名字的标号可以在不同名字作用域中定义。如: (1) begin (2)  L:begin (3)  goto L;//延迟使用 (4)  …… (5)  L:… (6)  end (7) end 第二,转移标号是非法的 (1)for i∶=1 to 10 do (2)  begin gotoL; (3)  for j∶=1 to 20 do (4)  begin goto L; … … (n)  L: end {forj} end {for i} 处理到第(n)行后,第(4)行的goto目标得以解决。而第(2)行的goto L是非法的,但只有当循环关闭时才能确定。 8.3.6 过程调用的翻译(四元式产生) 过程调用的实质是把程序控制转移到子程序(过程段)。在转子之前必须用某种办法把实在参数的信息传给被调用的子程序,并且应该告诉子程序在它工作完毕后返回到什么地方。 传递实在参数 , 过程调用 CALL S(A+B, Z) 将被翻译成: 计算A+B置于T中的代码/ T∶=A+B/ par T/第一个实参地址/ par Z/第二个实参地址/ call S/转子指令/ 如何产生反映这种模式的四元式 过程调用语句的文法: (1)S→calli(〈arglist〉) (2)arglist→arglist1,E (3)arglist→E 在处理实在参数串的过程中记住每个实参的地址 (1)S→calli (〈arglist〉) {For 队列 argulist.QUEUE 的每一项p Do Gen(par _,_,p); Gen(call,_,_,entry(i))} (2)arglist→arglist1,E {把E.PLACE 排在arglist1 .QUEUE 的末端; arglist.QUEUE:= arglist1 .QUEUE } (3)arglist→E {建立一个arglist.QUEUE ,它只包含一项E.PLACE} ?记录实在参数个数 8.3.7 数组的翻译 数组说明和数组元素的引用 将产生两组计算数组元素地址的四元式 一组计算VARPART,将它放在某个临时单元T中; 一组计算CONSPART,放在另一个临时单元T1中。 同时用表示数组元素的地址。 对应“数组元素引用”(引用其值)和“对数组元素赋值”有两个相应的四元式:“变址取数”和“变址存数”。 “变址取数”的四元式是: (=[ ], T1[ T ] ,-,X)/相当于X∶= T1[ T ] / “变址存数”的四元式是: ([ ]=, X1,-, T1[ T ] )/相当于T1[ T ] :=x/ 习题 …… ( 10 ) goto L ( 10 ) goto 0 …… …… 链尾 ( 10 ) ( 20 ) goto L

文档评论(0)

wendan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档