- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理;为什么要学习编译原理;课程内容
介绍编译器构造的一般原理和基本实现方法
介绍的理论知识:形式语言和自动机理论、语法制导的定义和属性文法、类型论等
强调形式描述技术和自动生成技术
;教材和参考书
李建中译,《编译原理》(龙书),机械工业出版社
陈火旺 刘春林等,《程序设计语言编译原理》,国防工业出版社
吕映芝,张素琴等,《编译原理》,清华大学出版社
李冬梅,施海虎,《编译原理》,人民邮电出版社
;要求及学习方法;第一章 编译概述;1.1.程序的翻译
1.2. 编译的过程
1.3. 编译程序的逻辑结构
1.4. 编译程序的生成
1.5. 编译技术的应用及发展
;1.1 程序的翻译;程序语言的分类;计算机硬件只懂自己的指令系统,那么它是如何识别除机器语言以外的另一种语言呢??
解决这一问题的方法:翻译程序!!;翻译程序;编译方式—编译程序;汇编程??;解释方式—解释程序;编译和解释程序
编译程序的工作相当于载翻译一本原著,计算机运行编译后的目标程序,相当于阅读一本译著;而解释程序的工作相当于在进行同声翻译,计算机运行解释程序,相当于我们直接通过翻译听外宾讲话。;
程序的编译执行:;程序的解释执行:
如:BASIC、Prolog,问题:效率低下
;编译程序与解释程序的差别;“编译+解释执行”系统;例如Java语言;编译程序在计算机系统中的位置;几个概念;1.2 编译的过程;1.编译程序的工作过程;翻译外文资料与编译源程序进行类比;将编译过程划分为5个基本阶段;从概念上来讲,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的。
事实上,某些阶段可能组合在一起,这些阶段间的源程序的中间表示形式就没必要构造出来了。
;1.2 编译的过程;2.编译器各阶段的工作;一个C源程序片断: int a; a = a + 2; 词法分析后可能返回: 单词类型 单词值 保留字 int 标识符 a 界符 ; 标识符 a 算符(赋值) = 标识符 a 算符(加) + 整数 2 界符 ;;词法分析的功能如下:
识别出源程序中意义独立的最小词法单位—单词。
删除无用的空格、回车和其他与输入介质有关的符号
删除程序员为了提高程序可读性所加的注释
如果发现错误则报告出错
;(2)语法分析
根据语法规则(即语言的文法),分析并识别出各种语法成分(如表达式、语句、函数等),并进行语法正确性检查。
通常将语法分析的结果表示为语法树。
;例:y = x + r * 6; 语法分析的功能是进行层次分析,把源程序的单词序列组成语法短语(表示成语法树)。依据的是语法规则。C语言的赋值语句的规则为:
单词序列y = x + r * 6之所以能表示成上图的语法树,依据的是赋值语句和表达式的语法规则。;(3)语义分析及中间代码生成
语义分析阶段的任务是审查源程序有无语义错误。源程序中有些语法成分,按照语法规则去判断,它是正确的,但它不符合语义规则。比如使用了没有声明的变量;或者给一个过程名赋值;或者调用函数时参数类型不合适或者参加运算的两个变量类型不匹配等等。
比如下边的程序片段: int arr[2],c; c = arr1 * 10 ;
其中的赋值语句是符合语法规则的,但是因为没有声明变量arr1,而存在语义错。
;中间代码生成(可选)
所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。
中间代码的形式:
四元式、三元式、逆波兰表示
;四元式;(4) 中间代码优化(可选)
代码优化阶段的任务是对前阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。
;这只是优化工作的两个方面,此外诸如公共子表达式的删除、强度削弱、循环优化等优化工作将在后面的章节详细介绍。
代码优化工作会降低编译程序的编译速度,因此编译优化阶段常常作为可选择阶段,编译程序具有控制机制以允许用户在编译速度和目标代码的质量间进行权衡。
;思考:代码优化能提高编译程序的运行效率吗?;(5) 目标代码生成
目标代码生成阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。这是编译的最后阶段,它的工作与硬件系统结构和指令含义有关,这个阶段的工作
原创力文档


文档评论(0)