网站大量收购独家精品文档,联系QQ:2885784924

编译原理 教学课件 作者 康慕宁 林奕 讲稿_1.ppt

编译原理 教学课件 作者 康慕宁 林奕 讲稿_1.ppt

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第一章 绪论 内容 汇编语言和高级程序设计语言 编译器基本构造 编译技术 编译器工作过程 1.1 汇编语言和高级语言 汇编语言、机器语言的特点 面向机器,CPU可直接执行 每个操作仅完成简单功能 缺少高层抽象元素的表示方法,直接访问内存地址 难以在不同机器间移植 程序编写复杂困难 汇编语言和高级语言 高级语言 面向程序员,机器不能直接执行,必须经过编译或解释才能执行 支持复杂的计算组合和流程控制 支持抽象的数据类型,通过名字访问变量、对象、类、函数等抽象元素 容易在不同机器间移植 编写复杂程序更为方便直观 C语言程序 x=a+b+c+d 对应的汇编程序 mov eax,dword ptr [ebp-8] add eax,dword ptr [ebp-0Ch] add eax,dword ptr [ebp-10h] add eax,dword ptr [ebp-14h] mov dword ptr [ebp-4],eax 1.2 编译器的基本概念 狭义的编译器 将高级语言编写程序翻译为汇编或二进制代码的软件系统 主要功能: 判断程序的合法性 程序被等价翻译为低级语言 程序错误的识别与提示 狭义的编译器 广义的编译器 广义的编译器 将一种语言编写的程序,翻译为具有相同功能的另一种语言的程序的软件 广义的编译器 编译器和解释器 编译器将一种语言编写的程序,翻译为另一种语言表示的程序 C++程序?可执行程序 ?C语言源程序 ?汇编程序 但这些程序本身并不能执行,而只是保存在磁盘或其他介质上的符号的集合 谁执行程序? 1、计算机 2、解释器 3、虚拟机 计算机执行程序 解释器的基本概念 解释器是运行在某个硬件平台上的一种软件。该软件负责读取输入的程序代码,并对其进行相应的计算或执行相应的功能 解释器的用途 编译器与虚拟机 编译器只把程序翻译为另一种语言的程序,而并不负责对翻译结果进行执行 CPU和解释器才是对翻译结果的执行者 解释器的两种类型: 1、高级语言解释器 2、低级语言解释器(虚拟机) 高级语言解释器 输入的是具有复杂语法、语义结构的源程序,如Basic语言,TCL/Tk语言,Matlab的m语言等编写的源程序,Dos批处理程序、Linux的Shell脚本程序 直接执行该程序的各种计算与交互任务 高级语言解释器的特点 结构复杂,执行效率低 虚拟机 高级语言的优点 面向程序员,与底层硬件无关 编译与执行分离,执行效率高 可移植性好 高级语言的不足 移植时需要重新编译 不同平台虽然差别不大,但即使微小的差别也可能引起移植时巨大的麻烦 虚拟机(续) 虚拟机 专门设计的具有通用性虚拟计算机 包括专门的指令集(通常称为字节码) 包括特定的内存管理体制 支持标准的数据表示格式(如IEEE浮点格式) 支持线程、锁等复杂模型 虚拟机的实现 软件实现的虚拟机 如Java虚拟机,可用来解释执行编译后的字节码程序 硬件实现的“虚拟机” 实际上,硬件实现的应该是真实的机器。但由于其指令集和体系结构是符合某种虚拟机规范的,因此也可认为是“虚拟机” 例如,直接实现Java虚拟机的硬件Java机器 1.3 编译技术的基本构造与工作原理 编译器和语言的规格说明 语言手册与规范 程序员手册与编程书籍 以上两种只有编译器设计者人工阅读,并将其转换为软件设计方案。存在二义性,无法保证不同编译器设计者的理解是完全相同的。 形式化的规格说明 精确的数学化的说明,可对其完善性进行数学验证,并根据规格说明自动生成编译器设计框架。 编译器的内部工作原理 人工翻译过程 int a;int add(int d1,int d2){return d1+d2;}int main(void){a=5;a=add(a, 6);return 0;} 自动翻译过程 1、线性扫描过程:自左向右,逐个字母 2、识别单词(关键字,标识符,注释,各种数字等) 3、复杂程序结构的识别不是简单线性的 识别过程不能通过简单的线性扫描完成 需要考虑当前已经识别到什么程度了 当扫描到”;”时,可以判定当前识别到的是一个变量定义。 当扫描到int d1后面的”,”时,可以确定遇到的是一个变量定义,但该变量却是函数add的形式参数。 虽然int a和int d1在构成上是一样的,但由于处于程序中的不同位置,因此对其理解却有着很大的不同。 编译器应当能够处理这些复杂的情况。 1.4 程序设计语言的编译技术 词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成 程序信息管理和错误检查与处理 词法分析 以字符为单位,从

您可能关注的文档

文档评论(0)

118压缩包课件库 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档