编译原理第五章复习.doc

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

第5章 1.语义分析的基本思想 语义分析就是语义信息的翻译与计算,而语义信息的翻译与计算与被翻译过程的最终含义或语义密切相关。 所谓语义分析,就是确定程序是有意义的,分析程序的含义,并做出相应的处理。 程序的含义包括: 数据结构的含义:和标识符相关联的数据对象。 控制结构的含义:由语言定义。规定了每个语句的执行效果。 注:1)由于编译器完成的分析是静态定义的,所以这里的语义分析也可称为静态语义分析; 2)静态语义分析包括构造符号表、记录声明中建立的名字的含义、在表达式和语句中进行类型推断和类型检查以及在语言的类型规则作用域内判断它们的正确性。 2.语义分析的基本功能 确定类型:确定标识符所关联的数据对象的数据类型。 类型检查:按照语言的类型规则,对运算及分量进行类型检查,必要时做出相应类型转换。 识别含义:根据程序设计语言的语义定义,确定各个构造部分组合后的含义,做出相应处理(生成中间代码或者目标代码)。 其它静态语义检查:比如控制流检查,嵌套层数检查。 3.语义分析的输入输出 输入为前面语法分析的结果。 输出为中间表示代码(抽象语法树,三元式…)。 把生成中间代码和代码生成分开,可以使难点分解。 对中间代码的分析比较容易,便于进行优化。 可以把编译程序分成机器独立部分和机器相关部分。 便于任务的分解,和开发人员的分组开发。 4.源程序的中间表示 优点: 和具体的机器特性无关,有利于重定目标。 可以对中间表示进行优化,提高代码质量。 可以分解程序的复杂性。 5.语法制导翻译 在语法分析的基础上进行边分析边翻译。 1)语法制导翻译时会根据文法产生式右部符号串的含义,进行翻译,翻译的结果是生成相应中间代码。 2)语法制导翻译的依据是语义子程序。 3)每个产生式均配置一个语义子程序,当语法分析进行归约和推导时,就调用相应语义子程序,完成一部分翻译任务。 4)随着语法分析完成,翻译工作也告结束。 6.语法制导翻译种类 1、自上而下语法制导翻译 对每个文法符号配以语义动作 2、自下而上语法制导翻译 注:我们主要讨论LR语法制导翻译。 7.语义子程序 描述一个产生式所对应的翻译动作。 1)语义子程序中的翻译工作在很大程序上决定要产生什么形式的中间代码。一般说来,这些工作包括改变某些变量的值、查填各种符号表、发现并报告源程序错误、产生中间代码等。 2)为了描述语义动作,需要为每个文法符号赋以各种不同的语义值:类型、地址、代码值等。 3)语义子程序一般写在相应产生式后面的花括号内。形如:X( ({语义子程序} 4)在一个产生式中,同一文法符号可能出现多次,它们代表不同的变量或值,需要加以区分。区分方法是给它们加上角标。 5)各个符号的语义值可放在语义栈内。 6)当产生式进行归约时,需对产生式右部符号的语义值进行综合,其结果作为左部符号的语义值保存到语义栈中。 7)若使用LR语法分析,则下推栈包含三个部分:状态栈、符号栈和语义栈,且语义栈与状态栈和符号栈同步变化。 8)若把语义子程序改成产生某种中间代码的动作,就能在语法分析制导下,随着分析的进展逐步生成中间代码。 9)若把语义子程序改成产生某种机器的汇编语言指令,就能随着分析的进展逐步生成某机器的汇编语言代码。 8.属性文法概念 对于某个压缩了的文法,当把每个文法符号和一组属性相关联,并把重写规则附加以语义规则的时候,就得到属性文法。 语法制导的翻译过程:由于属性文法的规则和重写规则是一一对应的关系。所以,由属性文法的确定的语义分析可以在语法分析的过程中进行。这个过程称为语法制导的翻译。 语法制导的定义/翻译方案:语法制导的定义比较抽象,隐藏了实现细节,无需指明语义规则的计算次序。翻译方案则指明的计算次序。 9.属性的计算和注释分析树 在语法制导分析过程中,我们不仅生成了一棵语法树,还可以得到各个结点的属性值。把这些值加入到语法树上面之后,就得到了注释分析树。 结点的属性值的计算过程有两种类型: 结点的属性由其子结点确定,称为综合属性。 结点的属性由兄弟结点和父结点的属性确定,称为继承属性。 在概念上,翻译过程如下: 1:分析输入符号,建立语法树 2:从语法分析树得到描述结点属性之间的依赖关系,得到计算次序。 3:按照语义规则计算属性值。 10.属性文法 一个属性文法AG是一个四元组(G,A,R,C),其中 G是已经压缩的文法。 A是有穷属性集合,对于每个文法符号X,都有其属性集合A(X)对应。 R是有穷属性规则集合。对于规则p:X0=X1X2…Xk,有规则Xi.a=f(Xj.b,…,Xpk.c)。定义了在使用这个规则进行归约的时候,Xi.a的求值。 C是有穷条件集合。C(Xi.a, …,Xj.a)表示规则p必须满足的条件。只有这些条件满足的

文档评论(0)

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

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

1亿VIP精品文档

相关文档