编译原理课件.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 语法制导翻译及 中间代码生成 5.1 引言 词法分析与语法分析仅仅是编译程序的一小部分。 在早期的一些编译程序中,是在语法分析的基础上根据源程序中各语法成份的语义,直接产生机器语言或汇编语言形式的目标代码。 现在的编译系统一般都将经过语法分析的源程序先翻译为某种形式的中间语言代码,然后再将其翻译为目标代码。 优点: 使编译程序各组成部分功能更单一; 使得编译程序的逻辑结构更为清晰,从而 使编译程序更易于编写与调整;同时 为代码优化和程序的可移植性提供了条件 语法分析和语义分析区别 语法分析是根据语法规则识别了出各种语法成份并进行语法检查。 讲义分析:语义正确性检查,同时进行语义处理,即根据语法成份的含义生成相应的中间代码或目标代码。 本章要讨论的中间代码生成,是指把单词符号串形式的源程序转换为另一种等价的便于代码优化处理和目标代码生成表示。 目前常见的中间语言有:逆波兰表示、三元式、四元式等等。 遗憾的是,中间代码生成与语言的语义密切相关,而语义的形式化描述是一个非常困难的; 存在一种称为语法制导翻译的模式,这种模式实际上是对前后文无关文法的一种扩充。 语法制导翻译方法:对文法中的每个产生式都附加一个语义动作或语义子程序,在语法分析过程中,每当需要使用一个产生式进行推导或归约,语法分析程序除执行相应的语法分析动作外,还要执行相应的语义动作或调用相应的语义子程序。 这种模式既把语法分析与语义处理分开,又令其平行地进行,让其在同一遍扫描中同时完成语法分析和语义处理两项工作。 由此可见,抽象文法符号的具体语义信息,是在与语法分析同步的语义处理过程中获取和加工的。 文法符号X的语义信息我们称之为语义属性或简称为属性(Attributes)。 我们用形如X.ATTR的记号来表示文法符号X的相关语义属性。 如果一个文法符号X在一产生式中多次出现,为了在语义上能够对其进行区分,可添加不同的上标。 文法符号及其语义属性 例如,文法G[E]: 产生式 语义子程序 E→E(1)+T {E.Val=E(1).val+T.val;} E→T {E.Val=T.Val;} T→digit {T.Val=digit;} 为了能在语法分析过程中平行地进行语义处理,可在语法分析栈旁边并行地设置一个语义信息栈 本章内容简介 本章,我们首先介绍一种适用于定义语义的一种特殊文法?属性文法,并进一步介绍适用于语义翻译的文法?属性翻译文法的相关知识。 在第三小节中我们将介绍几种常见的中间语言; 在第四小节中引入程序设计语言中常见语法结构的语法制导翻译技术。 5.2 属性文法与属性翻译文法 语法制导翻译方法的实质,就是根据文法中每个产生式所蕴含的语义,为其配备一个(或多个)处理语句或子程序,对所要完成的功能进行描述。 语义子程序的编写质量决定了语义翻译的准确性和有效性。所以,产生式相应语义子程序的正确性是能够进行正确语义翻译的先决条件。 产生式的语义是由组成该产生式的文法符号的语义所决定的。 我们可将这些语义以“属性”的形式附加到各个文法符号上,再根据产生式所蕴含的语义,给出每个文法符号的属性的求值规则,从而形成一种附带有语义属性的前后文无关文法,即属性文法。 属性文法的表示 用$$表示一个产生式左部符号的属性 用$1,$2 ,…,$n 表示产生式右部各个符号的属性。 如E → E + T的属性动作描述: $$=$1+$3 或 $$.val=$1.val+$3.val 一般用: x.val 代表x的语义值 x.place 代表x在符号表中地址 5.2.1 语义属性与属性文法 定义 5.1 一文法符号的语义性质称为该文法符号的语义属性(Attributes),简称为属性。我们用A(X)表示X的所有属性的集合。每个属性表示X的一个特定性质,并可任意指定其取值范围。我们用X.a表示A(X)中的属性a 。 属性可表征诸如数、符号串、类型、存储空间和其它需表征的实体。 终结符至少有一种属性,即词文。当然,它还可能具有其它属性,例如无符号数123,单词“123”就是它的词文,而其数值以及它的类型(整型)是它的其它两个属性。终结符的属性是其内在性质. 非终结符的属性是从其它符号的属性经计算而得的,即由其它符号的属性定义的。 属性依赖关系 各个文法符号的属性之间,可能存在某种依赖关系,这种依赖关系可用属性规则(语义规则)定义。 定义 5.2 设p:X0→X1X2…Xn是文法G的一个产生式,则与p相关联的属性规则集 R(p)={Xi.a=f(Xk1.ak1,…,Xkm.akm)|Xi.a∈A(Xi)} 定义了该产生式所涉及的文法符号之属性的

文档评论(0)

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

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

1亿VIP精品文档

相关文档