编译原理第三版第一章引论.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序设计语言 编译原理 主讲:高秀芬 gaoxfk@163.com 第一章 引论 1.1 什么是编译程序 计算机上运行的所有软件都是用某种程序设计语言编写的。 程序设计语言编写的程序可以运行之前,首先需要被翻译成一种能被计算机执行的形式。完成这项翻译工作的软件系统称为语言处理程序。 常用的语言处理程序有两种:解释程序和编译程序。 解释程序 定义:解释程序是边解释边执行源语言程序,不产生目标语言程序的一种语言转换系统。 特点:逐条语句地分析和执行,不生成目标程序。如:Basic,Prolog。 优点:易于查错 不足:效率低,运行速度慢 编译程序 编译程序是把用高级语言编写的源程序转换成低级语言(如汇编语言或机器语言)表示的目标程序的一种语言翻译程序。 特点:对整个程序进行分析,翻译成等价的目标程序后执行。如:Pascal,Fortran,C 优点:只需分析和翻译一次。 不足:在运行中发现的错误必须查找整个程序 确定。 图示 Java语言处理器 3.编译程序的分类 依据编译程序的不同用途和侧重可对其分类为: 诊断型编译程序-帮助程序开发和调试。 优化型编译程序-提高目标代码效率。 交叉型编译程序-编译程序产生不同于宿主机的机器代码,即A机器上运行的编译程序生成B机器的机器代码。 可变目标型编译程序-不重写编译程序中与机器无关的部分就能改变目标机。 4.编译技术的发展 第一个编译程序出现在20世纪50年代早期,多是将算术公式翻译成机器代码。 20世纪50年代中期,出现了FORTRAN等一批高级语言,相应的一批编译系统开发成功。 20世纪50年代末,提出并研制编译程序的编译程序,即编译程序的自动生成工具(LEX,YACC等)。 4.编译技术的发展 20世纪60年代起,出现自展技术(用被编译的语言来书写该语言自身的编译程序)。 1971年,PASCAL的编译程序用自展技术生成后,其影响越来越大。 至今已形成一套比较成熟、系统的理论与方法及开发环境,但并行编译、嵌入式应用的交叉编译等仍在研究和发展中。 5. 编译技术的应用 高级程序设计语言的实现。 每一轮编程语言新特征的出现都刺激编译器优化的新研究。 有效的编译器寄存器分配技术,使C语言的register关键字控制变得没有必要了。 程序翻译 二进制翻译。 编译器技术可用于把一种机器的二进制代码翻译成另一种机器的代码,以运行原先为别的指令集编译的代码 数据库查询解释器。 数据库查询由一些谓词组成,这些谓词由包含关系运算的布尔表达式组成,可以被解释执行,也可以被编译成搜索数据库的命令 针对计算机体系结构的优化 计算机体系结构的迅速演化引起对新的编译器技术的需要 并行编译 编译器重新整理指令,使得指令级并行更有效。 编译器从传统的串行程序自动生成并行代码,使之运行于多处理器上 内存分层 编译器优化历来集中在优化处理器的执行上,但是现在更强调要使内存分层更有效 新计算机体系结构的设计 现在计算机系统的性能不仅仅取决于它的原始速度,还取决于编译器是否能生成充分利用其特征的代码。 在现代计算机体系结构的研究中,在处理器的设计阶段就开发编译器,并将编译生成的代码在模拟器上运行,以评价拟采用体系结构的特征。 提高软件开发效率的工具 源于编译器中代码优化技术的程序分析一直在改进软件开发效率。 类型检查 类型检查是一种捕捉程序中前后不一致的成熟而有效的技术 边界检查 数据流分析技术可用来定位缓冲区溢出 1.2 编译过程概述 1、词法分析(Lexical analysis) 词法分析程序又称扫描程序。 是编译过程的第一个阶段,其任务是:读源程序的字符流、识别单词(如标识符、整数、界限符等),并转换成内部形式。 输入:源程序中的字符流 输出:等长的内部形式,即属性字。 举例 例:一个C源程序片段: int a; a=a+2; 词法分析后返回(如右图): 2、语法分析(Syntax analysis) 语法分析程序又称识别程序。 功能是:读入由词法分析程序识别出的符号,根据给定语法规则,识别出各个语法单位(如:短语、子句、语句、程序段、程序),并生成另一种内部表示。 输入:由词法分析程序识别出并转换的符号 输出:另一种内部表示,如语法分析树或其它中间表示。 例: id1:=id2+id3*10 的语法树 3、语义分析(Semantic analysis)和中间代码生成 对语法分析树或其他内部中间表示进行静态语义检查,并生成目标代码或中间代码。 确定类型 类型检查 识别含义与相应的语义处理 其它静态语义检查 为了优化,往往先生成内部中间表示代码,即中间代码。 语义分析举例 错在哪里? 例1: int arr[2], c; c

文档评论(0)

586334000 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档