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

编译原理实用教程杨德芳电子教案 第7章 语法制导翻译和中间代码.ppt

编译原理实用教程杨德芳电子教案 第7章 语法制导翻译和中间代码.ppt

  1. 1、本文档共105页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 语法制导翻译和中间代码生成 学习目标 任何编译程序都可以看作是这样的一个翻译程序:它将用某种源语言写的源程序转换为等价的用某种目标语言写的程序(目标程序),其中的目标程序可以是某种中间的语言程序。 语法制导翻译的基本思想是很简单的,就是先给文法中的每个产生式添加一个成分,这个成分称为语义动作或翻译子程序。在执行语法分析的同时,执行相应产生式的语义动作。这些语义动作不仅指明了该产生式所生成的符号串的意义,而且根据这种意义规定了对应的加工动作。本章要点: 语法制导翻译 中间代码的形式 各种语句的翻译 例题7.1 给出文法及其语义子程序 (0)S′→E print val[top] (1)E→E(1)+E(2) val[top]=val[top]+val[top+2] (2) E→E(1)*E(2) val[top]=val[top]*val[top+2] (3) E→(E(1)) val[top]=val[top+1] (4) E→i val[top]=lexval/*LEXVAL为i的整型内部值*/ 计算算术表达式7+9*5 #的语法值及各结点的值。 7.1概述 如同在进行词法分析、语法分析的同时也进行着词法检查、语法检查一样,在语义分析时也必然进行语义检查。语义分析包括动态语义分析和静态语义分析两类。动态语义分析就是进行真正的翻译,即生成程序的一种中间表示形式(中间代码)或需要生成相应的目标代码,它是运行时进行的;静态语义分析是在编译时完成的,它涉及到几个方面: 7.1.1 语义分析的概念 (1)类型检查,如参与运算的操作数其类型应相容。 (2)控制类检查,以保证控制语句有合法的转向点。如C语言中不允许goto语句转入case语句流。Break语句需要寻找包含它的最小的switch、while或for语句方可找到转向点,否则出错。 (3)一致性检查,如在相同作用域中标识符只能说明一次,case语句的标识不能相同等。 7.1.2 语法制导翻译 语法制导翻译的方法就是为每个产生式配上一个翻译子程序(称为语义动作或语义子程序),并在语法分析的同时执行这些子程序。语义动作是为产生式赋予具体意义的手段,它一方面指出了一个产生式所产生的符号串的意义;另一方面又按照这种意义规定了生成某种中间代码应做哪些基本动作。在语法分析过程中,当一个产生式获得匹配或用于归约时,此产生式相应的语义子程序就进入工作,完成即定的翻译任务。 语法制导翻译分为自底向上语法制导翻译和自顶向下的语法制导翻译。 7.2 属性文法 属性是指与文法符号的类型和值等有关的信息。在编译中用属性描述处理对象的特征。随着编译的进展,对语法分析产生的语法树进行语义分析,且分析的结果用中间代码描述出来。对于一棵等待翻译的语法树,它的各个结点都是文法中的一个符号X,该X可以是终结符或非终结符。根据语义处理的需要,在用产生式A→?X?进行归约或推导时,应能够准确而恰当地表达文法符号X在归约或推导时的不同的特征。例如,判断X的类型是否匹配,要用X的数据类型来描述;因此,在语义分析阶段引入X的属性,如X.type、X.place、X.val等分别描述变量X的类型、存储位置及值的不同特征。 文法符号的属性可以分为继承属性与综合属性两大类。 继承属性用于“自上而下”传递信息。继承属性由相应语法树中的结点的父结点属性计算得到,即沿语法树向下传递,由根结点到分枝结点,它反映了对上下文依赖的特性。继承属性可以很方便地用来表示程序语言上下文的结构关系。 综合属性用于“自下而上”传递信息。综合属性由相应语法分析树中结点的分支结点属性计算得到,其传递方向与继承属性相反,即沿语法分析树向上传递,从分枝结点到根结点。 7.2.2 属性文法 属性文法是一种适应于定义语义的特殊文法,即在语言的文法中增加了属性的文法。它将文法符号的语义以“属性”的形式附加到各个文法的符号上。再根据产生式所包含的含义,给出每个文法符号属性的求值规则,从而形成一种带有语义属性的上下问无关文法,即属性文法。属性文法也是一种翻译文法,属性有助于更详细地指定文法的代码动作。 例题7.2 (1)S→E print(E.val) (2) E→E(1)+ T E.val= E(1).val+T.val (3) E→T E.val= T.val (4) T→T(1)* F T.val= T(1).val*F.val (5) T→T(1) T.val= T(1).val (6) F→(E) F.val= E.val (7) F→i F.val= i.lexval 例题7.3 描述说明语句中各种变量的类

您可能关注的文档

文档评论(0)

118压缩包课件库 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档