6语法制导翻译和中间代码生成的4.0.ppt

  1. 1、本文档共99页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6语法制导翻译和中间代码生成的4.0

如 IF A∨B THEN WHILE C DO X:=Y+Z ELSE S1,S2 END 识别出IF,则认定有E,对E编一递归过程,要做到: 把A∨B消化掉,产生相应的四元式 算出语义值,送到E.TC和E.FC中 回填E.TC,即真转出口 识别出THEN,认定是一个语句S,此S是一递归过程。 把WHILE语句消化掉,产生相应的四元式。 把S的不能确定内容作为S.CHAIN 识别ELSE,认定还必须是一个S,完成S的翻译。 S(2)的翻译 E.FC返填 三流合一,作为返回 S(2) 自上而下表现值,确定了一个大前提,可以在产生式中间调用语义程序 在规约过程中,编出四元式 所有子程序,要递归 子程序的返回值是语义值 关于如何把语义程序套进递归下降器中,参看书上的两个例子。 早期的编译程序中,语法分析和语义翻译往往混杂在一起。把语法分析和语义翻译分开不仅可使语法分析形式化和自动化,而且可使整个编译程序的结构更合乎逻辑和更加系统化。语法制导翻译技术就是为这个目标而生的。该方法在六十年代初出现之后很快就得到了推广应用。 最早使用语法制导翻译法来设计编译程序的是埃仁。语法制导翻译法由于埃伊柯尔、奇塔姆和菲尔德曼等人的工作而迅速传播开来。在理论方面,早期有刘易斯等人。 1 程序设计语言—编译原理 国防科学技术大学 陈火旺 P132-P177 2 编译原理及实践 Keeneth C.Louden 冯博琴等译 第八章 代码生成 3 现代编译程序设计 冯博琴等译 第四章 处理中间代码 产生代码过程 case 产生标号TEST,NEXT和一个临时单元T E 产生 T:= E的四元式 OF 产生GOTO TEST四元式,设置一个空队列QUEUE Ci 产生一个标号Li,连同NXQ填入符号表,(Ci,Pi)进入队列QUEUE Si 产生{ Si 四元式} { GOTO NEXT} otherwise 产生标号Ln,连同NXQ填入符号表 END 产生n个条件转移语句的四元式 TEST: (case, C1, P1, _) (case, C2, P2, _) … (case, Cn-1, Pn-1, _ ) (case, T, Pn, _ ) (label, NEXT, _, _) NEXT: 注意 1 末尾的多向转移目标指令组,视不同情况生成,可优 化处理。 如果Si又是一个case语句。怎么办? 应该建立嵌套队列,要解决队列嵌套,栈嵌套的底标记问题。 3 在产生完指令之后,队列可以不要,但符号表仍然存在,这样可以灵活地优化。 本小节讨论数组元素的表达式和赋值句的翻译。由于数组元素较简单变量有一定的特殊性,分几个方面来介绍。 本节内容 地址计算公式 四元式中数组元素表达形式(数组元素引用和中间代码) 赋值语句中数组元素的翻译 简化假定 数组元素按行存放,每维下限都为1,每个元素只占一个机器字,目标机器存储器是以字编址的。 对数组元素A[i1,i2,…in]地址D的计算公式如下: D = CONSPART + VARPART CONSPART = a – C C = d2d3…dn + d3d4…dn + … + dn +1 VARPART = i1d2d3…dn+i2d3d4…dn+…+in-1dn+in a addr(A[1,1,…1]),数组首址 注意 CONSPART只依赖于数组各位的界限d和数组的首址a,与数组元素各维的下标i1,i2,…,in无关。因此,对确定数组而言,计算数组元素的地址时,无需独立计算CONSPART。 VARPART是一个可变部分,它的值随着各维下标i1,i2, …,in的不同而不同。 计算数组元素的地址主要计算VARPART。 这儿只讨论确定数组(编译时可静态确定体积的数组,也称静态数组)的翻译。 简单变量可以在符号表中查到它的地址,而数组元素却不行,在符号表中只有它们的总代表——数组名的入口。 名字 特性 地址 A 数组 i1 u1 d1 In un dn n C type a A[1,1,…,1] A[1,1,…,2 … 因此,每个下标变量在语句中出现,如 X:=A[…

文档评论(0)

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

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

1亿VIP精品文档

相关文档