- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理--主讲葛 琳
返回 * 龙书:骑士和龙。77年,绿龙书;86年,红龙书,2006年,紫龙书 Whale book封面是奇而卡特毛毯,毛毯上的图案是一条水中潜游的鲸鱼。 * 所谓不同类型的计算机指的是使用的机器语言不同 * 先介绍语法,然后才介绍语法分析。 * 隐式类型转换:二元运算符作用于整数和浮点数,会自动将整数转换成浮点数进行运算。 * * * * * * 1.1.3 语义分析 语义分析:分析语法结构的含义和功能;检查程序语义一致性;为代码生成阶段收集信息。 语义分析的一个重要部分是类型检查。 类型是否合法:例,数组下标为整数(浮点数) 隐式类型转换(coercion) 目前较流行的是使用“语法制导翻译”的方法将语法分析和语义分析有机地组织起来。 课本第四章介绍语法制导翻译,第五章介绍类型检查。 1.1.3 语义分析(续) 语义分析器 符 号 表 position initial rate . . . . . . . . . 1 2 3 = id,1 id,3 id,2 + * 60 = id,1 id,3 id,2 + * inttofloat 60 1.1.4 中间代码生成 在对源程序进行过语法和语义分析之后,很多编译器会显式的生成一种比较低级的中间表示,即中间代码。 中间表示必须具备特点: 易于产生。 易于翻译成目标程序。 1.1.4 中间代码生成 中间表示有多种形式:逆波兰表示(后缀表示)、三地址码(三元式、四元式等)、树型结构等。 position = initial + rate * 60的逆波兰表示为: position initial rate 60 * + = 一种很常用的中间表示是三地址码。 1.1.4 中间代码生成(续) = id,1 id,3 id,2 + * inttofloat 60 中间代码生成器 t1 = inttofloat(60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3 符 号 表 position initial rate . . . . . . . . . 1 2 3 特点: 必须先决定运算次序 临时变量 不一定有三个运算对象 1.1.4 中间代码生成(续) 中间代码的产生与语义分析紧密相连,课本在第七章介绍中间代码生成。 1.1.5 代码优化 为了产生质量较高的目标代码,通常在中间代码生成和目标代码生成两个阶段之间,插入一个代码优化阶段。 质量较高的目标代码:通常指执行较快,但也可能指目标代码较短或执行时能耗较低。 1.1.5 代码优化(续) 代码优化器 t1 = id3 * 60.0 id1 = id2 + t1 t1 = inttofloat(60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3 符 号 表 position initial rate . . . . . . . . . 1 2 3 1.1.5 代码优化(续) 能够完成大多数优化的编译器叫做“优化编译器”。(编译时空复杂度增加,可靠性下降) 简单优化也可使目标程序运行时间大大缩短,而编译速度并未降低太多。 优化在课本第九、十章介绍,不作为本课程授课内容。 1.1.6 目标代码生成 代码生成阶段:由中间代码生成目标代码(机器指令或汇编码) 目标代码生成阶段所做的工作: 为变量选择存储单元 把中间代码翻译成等价的机器指令序列。 此阶段的关键问题是:寄存器分配 代码生成主要在课本第八章介绍,不作为本课程主要授课内容。 1.1.6 目标代码生成(续) 代码生成器 t1 = id3 * 60.0 id1 = id2 + t1 MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 符 号 表 position initial rate . . . . . . . . . 1 2 3 1.1.7 符号表管理 编译器的一项重要工作是记录并收集标识符及其各种属性,以提供标识符存储分配、类型、作用域等信息。 符号表为每个标识符保存一个记录数据结构,其中的域是标识符的各个属性。 该数据结构应允许编译器迅速找到一个名字的记录并读取和存储数据。 1.1.7 符号表管理(续) 符号表将在课本第七章讨论。 符 号 表 position initial rate . . . . . . . . . 1 2 3 1.1.8 阶段的分组 以上将编译器从逻辑上分成7个阶段: 前四阶段完成对源程序的分析,它们与源语言密切相关,因此也称为前端(front-end) 后三阶段完成对源程序的综合,由于与目标机器更相关,故也称后端(back-end) 阶段的分组 词法分析器 语法分析器
文档评论(0)