网站大量收购独家精品文档,联系QQ:2885784924

单元辅导(四).pptVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单元辅导(四).ppt

单元辅导(四) 语法制导翻译技术和中间代码生成 属性文法 是编译技术中用来说明程序设计语言的语义的工具,也是当前在实际应用中比较流行的一种语义描述方法。属性是用来描述计算机处理对象的特征。一个属性文法是在上下文无关文法的基础上,允许每个文法符号X(终结符或非终结符)根据处理的需要,定义与X相关联的属性。一个属性文法形式上定义为一个三元组AG,AG=(G,V,E)。其中G表示一个上下文无关文法;V表示属性的有穷集;E表示属性的断言或谓词的有穷集。在属性文法中: 每个属性与某个文法符号X(终结符或非终结符)相关联,用“文法符号.属性”表示这种关联。 每个断言与文法某规则式相关联。 属性分为两类:综合属性和继承属性。一般情况下,综合属性用于“自下而上”传递信息,继承属性用于“自上而下”传递信息。又根据不同的处理要求,属性和断言可以多种形式出现,也就是说,与每个文法符号相关联的可以是各种属性、断言及语义规则,或者某种程序设计语言的程序段等。举例说明见书P97:[例5.1]、[例5.2] 语法制导翻译 基本思想是对文法中的每个产生式都附加上一个语义动作或语义子程序,在执行语法分析的过程中,每当使用一条产生式进行推导或归约时,就执行相应产生式的语义动作。这些语义动作不仅指明了该产生式年产生符号串的意义,而且还根据这种意义规定了对应的加工动作,从而完成预定的翻译工作。所谓语法制导翻译法就是在语法分析过程中,随着分析的逐步进展,根据相应文法的每一规则所对应的语义子程序进行翻译的方法。语法制导翻译技术分为自底向上语法制导翻译和自顶向下语法制导翻译。实现语法制导翻译的方法:(1)为文法的每一个规则设计相应的语义子程序。(2)为文法构造LR分析表。(3)将原LR语法分析栈扩充,以便存放文法符号对应的语义值。这样分析栈中可以存放三类信息:分析状态、文法符号及其语义值。(4)根据语义分析栈的工作过程设计总控程序,使其在完成语法分析工作的同时也能完成语义分析工作,即在用某一个规则式进行归约的同时,调用相应的语义子程序,完成所用规则式相应的语义动作,并将每次工作后的语义值保存在扩充后的“语义值”栈中。举例说明见书P99。 中间语言:形式为分为逆波兰式(后缀式)、三元式和树形表示、四元式和三地址代码等。 逆波兰式:这种表示法除去了原表达式中的括号,并将运算对象写在前面,运算符写在后面,因而又称后缀式。 三元式和树形表示:(1)三元式:一个三元式由三个主要部分和一个序号组成:(i)(op,arg1,arg2) 其中op是运算符,arg1,arg2是两个运算对象,当op是一目运算时,选用argi,(i=1,2)表示运算对象,也可以事先规定用arg1。三元式出现的先后顺序与表达式的计值顺序一致,三元式的运算结果由每一个三元式前的序号(i)指示,序号(i)指向三元式所处的表格位置。因此,引用一个三元式的计算结果是通过引用该三元式的序号实现的。(2)间接三元式:由于三元式的先后顺序决定了值的顺序,因此在产生三元式形式的中间代码后,对其进行代码的优化时难免涉及到改变三元式的顺序,这就要修改三元式表。为了最少改动三元式表,可以另设一张间接码表来表示有关三元式在三元式表的计值顺序。用这种办法处理的中间代码称为间接三元式。(3)树形表示:实质上是三元式的另一种表示形式 四元式和三地址代码:(1)四元式主要由四部分组成:(i)(op,arg1,arg2,result) 其中op是运算符,arg1,arg2分别是第一和第二个运算对象,当op是一目运算时,常常将运算对象定义为arg1。(2)三地址代码是四元式表示成另一种更直观/更易理解的形式,定义为 X= a op b 其中x,a,b可为变量为或临时变量名,a,b还可为常数;op是运算符,特别注意这种表示法与赋值语句的区别是每个语句的右边只能有一个运算符。 自底向上语法制导翻译:在自下而上的语法分析过程中逐步实现语义规则的方法。特点:(1)当栈顶形成句柄执行规约时,调用相应的语义动作。(2)语法分析栈与语义分析栈同步操作。 1、简单算术表达式和赋值语句的翻译:简单算术表达式是一种仅含简单变量的算术表达式,简单变量一般可为变量、常数等,但不含数组元素、结构引用等复合型数据结构。简单算术表达式的计值顺序与四元式出现的顺序相同,因此很容易将其翻译成四元式形式。当然,对这些翻译方法稍加修改也可用于产生三元式间接三元式。 实现简单算术表达式和赋值语句到四元式的翻译一般采取下列步骤: (1) 分析文法的特点。 (2) 设置一系列语义变量,定义语义过程、语义函数。 (3) 修改文法,写出每一规则式的语义子程序。 (4) 扩充LR分析

文档评论(0)

cai + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档