- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 语法制导翻译和中间代码生成
PAGE
PAGE 11
PAGE 11
第八章 语法制导翻译和中间代码生成
1、教学目的及要求:
本章介绍编译程序的第三个阶段语义分析及中间代码生成的设计原理和实现方法,要求理解语法制导翻译、语义动作的基本概念;掌握算数表达式和赋值语句到中间代码的翻译、布尔表达式的目标代码结构分析和到四元式的语法制导翻译。
◇明确语义分析在编译过程所处的阶段和作用。
◇掌握属性文法的基本概念。
◇使用属性文法和语法制导翻译方法描述具体的语义分析和产生中间代码。
2、教学内容:
语法制导翻译的基本概念、 中间代码的形式,可执行语句的语法制导翻译方法。
3、教学重点:
语法制导翻译基本思想,语法制导翻译概述,基于属性文法的处理方法,自下而上分析制导翻译概述。
4、教学难点:
属性文法的处理方法,语法制导翻译实现的方法。
5、课前思考
◇ 回顾第一章介绍的编译过程,理解语义分析在编译过程中的位置和作用。 ◇什么是中间表示(中间代码),为什么要中间表示? ◇语法制导翻译是什么含义? ◇ 高级语言语句的结构和低级语言结构的不同。
6、章节内容
第一节 语法制导翻译概述
第二节 中间代码的形式
第三节 简单算术表达式和赋值语句的翻译
第四节 布尔表达式的翻译
8.1语法制导翻译概述
编译程序的第三个阶段是语义分析。语义分析的任务是:在词法分析和语法分析的基础上,分析所写源程序的含义,在理解含义的基础上生成中间代码或直接生成目标代码。语义分析包括语义检查和语义处理。
语义检查,例:类型、运算、维数、越界。
语义处理,例:变量的存储分配、表达式的求值、语句的翻译(中间代码的生成)。
中间代码或称中间语言,是复杂性介于源程序语言和机器语言之间的一种表示形式,在中间代码一级可进行代码优化工作。
一、属性文法
目前许多编译程序的语义分析均采用语法制导翻译方法,它比较接近形式化。语法制导翻译法采用属性文法为工具来说明程序设计语言的含义。
属性是文法符号的语义性质的表示。对于文法中的某个终结符或非终结符,其属性可以有“类型”、“值”或“存储位置”等。
一个属性文法包含一个上下文无关文法和一系列语义规则,这些语义规则附在文法的每一个产生式上。形式上讲,一个属性文法是一个三元组 A=(G,V,F)
G:一个上下文无关文法
V:一个属性的有穷集
F:关于属性的断言或谓词的有穷集
其中:每个属性与文法的某个非终结符或终结符相联,每个断言与文法的某个产生式相联,如果对G中的某一输入串而言(句子),A中的所有断言对该输入串的语法树结点的属性全为真,则该串也是A语言中的句子。
例1、有文法G为 E?T1+T2|T1 or T2 T?num|true|false
若属性文法中用N.t表示与非终结符N相联的属性,则对上述表达式的类型检查的属性文法可表示如下:
E?T1+T2
E?
T?num {T.t=int }
T?true {T.t=bool }
T? false {T.t=bool }
即与每个非终结符T相联的有属性t(即“类型”),t要么是int,要么是bool。与非终结符E的产生式相联的断言是:两个T的属性必须相同。
例2、简单算术表达式求值的语义描述
产生式 语义规则
(0)L?E print(E.val)
(1)E?E1+T
(2)E?T E.val:=T.val
(3)T?T1*F T.val:=T1.val*F.val
(4)T?F T.val:=F.val
(5)F?(E) F.val:=E.val
(6)F?digit F.val:=digit.lexval(lexval指综合属性)
每个非终结符都有一个属性val(即“数值”)。
单词digit的值是由词法分析程序提供的。
与产生式L?E相联的语义规则是一个过程,该过程实现的功能是打印由E产生的表达式的值。我们可以理解为L的属性是空的或是虚的。
例3.说明语句中变量的类型信息的语义规则
产生式 语义规则
(1)D?TL L.in:=T.type
(2)T?int T.type:=integer
(3)T?real T.type :=real
(4)L?L1,id L1.in:=L.in addtype(id.entry,L.in)
(5)L?id addtype(id.entry,L.in)
该语义规则中的addtype为一过程调用,其功能是把每个标识符的类型信息登录在符号表的相关项中。type表示类型,综合属性;in起到类型传递的作用,继承属性;entry是单词 id 的属性。
属性文法最早出自克努特笔下,它将属性分
文档评论(0)