第一章 编译器概述

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译程序 (器)
广东商学院信息学院
低级语言程序 (目标程序) 目标程序)
2 /34
编译器实际产生的代码
编译程序并不直接产生机器代码,即可执 行代码,而是产生汇编语言的目标代码。 汇编代码经汇编程序转换后,再由链接程 序(Linker)进行装配连接,才会产生真 正的可执行二进制代码。
广东商学院信息学院
高级语言源程序 数据 解释程序 (器) 计算结果
编译器和解释器
编译器和解释器的比较
编译器 解释器 规模较大 中小规模 机器代码(低级 数据结构(高级 低级) 高级) 机器代码 低级 数据结构 高级 硬件CPU 硬件 软件系统 相对较慢 相对较快
程序规模 内部形式 运行机构 运行速度
广东商学院信息学院
10 /34
编译器与解释器比较
源代码: b:=2; a:=b+2; write(a); …
解释器输出: 4
编译器输出: movf #2, b movf b , R1 addf #2, R1 movf R1, a
广东商学院信息学院
11 /34
元级
对程序的操作称为元级操作。 含有元级操作的程序称为元级程序。 含有元级操作的软件系统称为元级软件 系统。 编译器、解释器和调试器(Debugger)等都 共通特点:不是 称为元级程序,它们的共通特点 共通特点 以数据,而是以程序为操作对象。 编译技术是所有元级程序的基础技术。 编译技术是所有元级程序的基础技术。
3 /34
一般程序 VS 编译程序
一般程序: 输入对象是数据或文 本等,输出是计算结 果、文本或图形等。 编译程序: 输入对象是整个源程 序,输出结果是另一 个程序-即目标机程 序。
广东商学院信息学院
4 /34
高 级 语 言 程 序 到 可 执 行 代 码 的 转 换 过 程
需预处理的源程序 预处理器 经过预处理的源程序 编译程序 目标汇编程序 汇编程序 可重定位的目标代码 连接/ 连接/装配程序 绝对目标代码
汇编程序:源语言为汇编语言, 汇编程序: 源语言为汇编语言 , 目标语言为机器语 言的翻译程序。 言的翻译程序。 编译程序( 源语言为高级语言, 编译程序 ( 器 ) : 源语言为高级语言 , 目标语言是 低级语言(汇编或机器语言)的翻译程序。 低级语言(汇编或机器语言)的翻译程序。
高级语言程序 (源程序) 源程序)
16 /34
中间代码生成 Generate) (Intermediate Code Generate) 将源程序转换成一种称为中间代码的内 部表示形式。 部表示形式。中间代码是一种简单的含义 明确的记号系统。 明确的记号系统。 特点:易于产生,易于优化,且易于翻译成目标程序。 特点:易于产生,易于优化,且易于翻译成目标程序。 中间代码优化(Code Optimization) 中间代码优化( Optimization) 变换或改造中间代码, 变换或改造中间代码,使生成的目标代码 更为高效,即节省时间和空间。 更为高效,即节省时间和空间。 目标代码生成( Generation) 目标代码生成(Code Generation) 中间代码变换为特定机器上的绝对指令代码或可重 定位的指令代码或汇编指令代码。 定位的指令代码或汇编指令代码。
13 /34
编译器的功能结构图
表 处 理
源 程 序
词 法 分 析
语 法 分 析
语 义 分 析
中 间 代 码 生 成
中 间 代 码 优 化
目 标 代 码 生 成
目 标 程 序
错 误 处 理
词法分析( 词法分析(Lexical Analysis) 依循语言的词法规则,扫描源程序的字符串, 依循语言的词法规则,扫描源程序的字符串, 识别每一个单词, 识别每一个单词,并将其表示成所谓的机内表 示TOKEN(词法记号)形式。 (词法记号)形式。 例:position=initial+rate*60 (id,1)(=)(id,2)(+)(id,3)(*)(60)
广东商学院信息学院
22 /34
编译器的伙伴程序
汇编器:处理对象是汇编代码, 汇编器:处理对象是汇编代码,而处理结果是 可重定位的机器代码。 可重定位的机器代码。 编译器一般不直接产生机器的目标代码, 编译器一般不直接产生机器的目标代码, 而是产生汇编语言代码或抽象机代码。 而是产生汇编语言代码或抽象机代码。 装配器:要运行可重定位的代码, 装配器:要运行可重定位的代码,必须先把需 要重定位诉地址全部修改为绝对地址。 要重定位诉地址全部修改为绝对地址。 工作:一是装入程序,二是连接编辑。 工作:一是装入程序,二是连接编辑。 连接程序(linker) 将不同的目标文件连接到一 连接程序 个可执行的文件中。 个可执行的文件中。 装入程序(loader) 将程序加载到内存 装入程序
8 /34
解释器和编译器特点
解释器通常能够在大多数类型的计算机上运行; 解释器通常能够在大多数类型的计算机上运行; 而编译器产生的目标代码只能在所选类型的计算 机上运行。解释器更加通用。 机上运行。解释器更加通用。 基于解释执行的程序可以动态修改自身, 基于解释执行的程序可以动态修改自身, 而基于编译执行的程序则需要动态编译技 难度较大。 术,难度较大。 基于解释方式有利于人机交互。 基于解释方式有利于人机交互。 执行速度。解释器执行速度要慢。 执行速度。解释器执行速度要慢。 空间开销。 解释器需要保存的信息较多, 空间开销。 解释器需要保存的信息较多, 空间开销大 二者实现技术相似。 二者实现技术相似。
广东商学院信息学院
12 /34
编译器内部结构
1.2 编译程序的组织结构:
典型的编译过程一般可划分成 词法分析、语法分析、语义分析、中间 代码生成,代码优化和目标代码生成六 个阶段,每个阶段将源程序的一种表示 形式转换成另一种表示形式,各个阶段 进行的操作在逻辑上是紧密连接在一起 的。如下图示:
广东商学院信息学院
广东商学院信息学院
23 /34
编译程序的实现途径(一)
编译器设计中最重要的是性能,其次是可移植 编译器设计 性、可维护性,可扩展性等。 性能主要指编译器本身的质量,如编译可靠性、 编译速度、目标代码执行速度和所占用空间等。 编译器的设计涉及:一是源语言(输入),二 是目标语言(输出),三是实现语言(工具)。
编译器前端和后端
编译器:分析部分(前端)和综合部分(后端) 编译器:分析部分(前端)和综合部分(后端) 分析部分把源程序分解成多个组成要素, 分析部分把源程序分解成多个组成要素,并在这些 要素之上加上语法结构。 要素之上加上语法结构。 综合部分根据中间表示和符号表中的信息来构造目 标程序 编译器的前端:一般包括词法分析、语法分析、符号 编译器的前端:一般包括词法分析、语法分析、 表构造、语义分析、中间代码生成、 表构造、语义分析、中间代码生成、代码优化和错误 处理等。此部分工作的特点是不依赖于具体机器 不依赖于具体机器。 处理等。此部分工作的特点是不依赖于具体机器。 编译器的后端: 编译器的后端:主要是指中间代码到目标代码生成的 阶段。此部分紧密地依赖于中间代码和目标机 阶段。此部分紧密地依赖于中间代码和目标机
解释程序 VS 编译程序
解释程序: 不同点: 解释器(Interpreter)是 源程序的一种执行系 统,它的输出是源程 序的执行结果。 编译程序: 编译程序是源程序 的一种转换系统,它 的输出是一个与源程 序的逻辑功能相当的 目标程序。
共同点:两者的输入,操作对象都是整个程序。
ຫໍສະໝຸດ Baidu
广东商学院信息学院
广东商学院信息学院
21 /34
编译器的伙伴程序
可执行代码: 可执行代码:指不需要做任何处理就可以在计 算机上运行的绝对地址代码。 算机上运行的绝对地址代码。 一汇编代码;二是抽象机代码。 一汇编代码;二是抽象机代码。 预处理器:删除源程序中的注释、 预处理器:删除源程序中的注释、执行宏替换 以及包含文件的嵌入等。 以及包含文件的嵌入等。 如果输入(的程序)是对原编译器输入的扩 如果输入(的程序) 增加语句,增加宏定义, 充,如:增加语句,增加宏定义,增加文件包 含等。则采用预处理器。 含等。则采用预处理器。 思想:把扩充部分转换成原输入的形式, 思想:把扩充部分转换成原输入的形式,然后 把其结果交给原编译器处理。 把其结果交给原编译器处理。
广东商学院信息学院
库文件
5 /34
基本概念
机器语言:能够被计算机的硬件系统直 机器语言 接执行的指令程序。 汇编语言:将硬件指令用一些助记符表 示。如ADD表示加法操作, SUB表示减法操作等等 高级语言:使用便于理解的自然语言。
语言处理程序
解释程序( 解释程序(器):接受所输入的用程序 语言(源语言)编写的程序(源程 序),然后直接解释执行源程序。 相当于源程序的抽象执行机,是语 言的实现系统。
语言处理程序
翻译程序( 翻译程序(器):接受某种语言的源语 言程序后,将它改造成另一种逻辑 上等价的目标语言程序。
广东商学院信息学院
1 /34
翻译程序(器) 翻译程序(
翻译程序( 接受某种语言的源语言程序后, 翻译程序 (器) : 接受某种语言的源语言程序后 , 将它改造成另一种逻辑上等价的目标语言程序。 将它改造成另一种逻辑上等价的目标语言程序 。
语义分析( Analysis) 语义分析(Semantic Analysis) 使用语法树和符号表中的信息来检查 源程序是否和语言定义的语义一致。 源程序是否和语言定义的语义一致。 审查源程序有无语义错误, 审查源程序有无语义错误,为代码生 成阶段收集类型信息。 成阶段收集类型信息。
广东商学院信息学院
广东商学院信息学院
19 /34
扫描遍数
遍:对源程序或源程序的中间表示形 式从头到尾扫描一次,生成新的中间结 式从头到尾扫描一次, 果或目标程序 一遍扫描结构:直接产生目标码,速度 一遍扫描结构 快,但算法不清晰,不便于优化。 多遍扫描结构:层次分明,结构清晰, 多遍扫描结构 易于掌握。 特点: 特点:便于优化,移植,修改。 大型语言宜采用多遍扫描
position Initail rate
语法分析( 语法分析(Syntax Analysis) 依据语言的语法规则,将单词的Token Token序 依据语言的语法规则,将单词的Token序 列分解成各类语法短语, 列分解成各类语法短语,确定整个输入 串是否构成一个语法上正确的程序。 串是否构成一个语法上正确的程序。 通常用语法树的形式表示
符号表管理( 符号表管理(Symbol-Table Management) 保存有关源程序构造的各种信息的数 据结构。 据结构。 为了合理的管理表格(构造、查找、 为了合理的管理表格(构造、查找、 更新), ),设立一些专门子程序称为表格 更新),设立一些专门子程序称为表格 管理程序负责管理表格。 管理程序负责管理表格。 错误处理( 错误处理(Error Detection and Reporting) 各个阶段还存在着错误处理模块, 各个阶段还存在着错误处理模块 , 当 有错误出现时, 有错误出现时 , 由相应的错误处理模块 给出解决方案, 给出解决方案 , 使得编译器能够继续进 行下去。 行下去。
广东商学院信息学院
20 /34
编译器的伙伴程序
编辑器 (editor) 除一般的文本编辑功能 还可以对正在编辑的文本进行分析、 外,还可以对正在编辑的文本进行分析、 提示、自动提供关键字匹配等功能。 提示、自动提供关键字匹配等功能。 调试程序(debugger) 调试程序(debugger) 在被编译的程序中 判定执行错误的程序
编译程序的实现途径(一)
预处理方法
用于语言的扩充。设已有L语言的编译器,其扩 充语言L1的编译器可通过语言转换程序将L1程序转 换为L程序,利用L的编译器,从而实现L1的编译器。
移植法
同一语言的编译器在不同机器间的移植。方法: 同一语言的编译器在 a 目标代码的转换 b 修改中间代码到目标代码的转换
广东商学院信息学院
25 /34
编译程序的实现途径(二)
自展法 自我扩展,自己编写自己的编译器。
实现语言L: 1.选择其子语言L1,并用低级语言写L1的编译程序; 2.扩充L1语言成L2:L1高级语言写L2的编译程序; 3.如此下去直到写L语言的编译程序。
相关文档
最新文档