编译程序
构造原理和实现技术
授课教师:吕江花
第一章 编译程序概述
主要内容:
? 几个基本概念
? 编译器的工作过程概述
? 编译器各个阶段的功能描述
? 编译程序的实现途径
基本概念
? 机器语言,能够被计算机的硬件系统直
接执行的指令程序。
? 汇编语言:将硬件指令用一些助记符表
示。如 ADD表示加法操作,
SUB表示减法操作等等
? 高级语言:使用便于理解的自然语言。
语言处理程序
? 解释程序 ( 器 ),接受所输入的用程序
语言 ( 源语言 ) 编写的程序 ( 源程
序 ), 然后直接解释执行源程序 。
相当于源程序的抽象执行机, 是语
言的实现系统 。
高级语言源程序 ? ? 计算结果
数据 ?
解释程序
(器)
语言处理程序
? 翻译程序 ( 器 ), 接受某种语言的源语
言程序后, 将它改造成另一种逻辑
上等价的目标语言程序 。
翻译程序
? 汇编程序,源语言为汇编语言, 目标语言
为机器语言的翻译程序 。
? 编译程序(器),源语言为高级语言,目
标语言是低级语言(汇编或机器语言)的
翻译程序。
高级语言程序
(源程序)
低级语言程序
(目标程序)
编译程序
(器)
需预处理的源程序
预处理器
源程序
编译程序
目标汇编程序
汇编程序
可重定位的目标代码
连接 /装配程序
绝对目标代码

















解释器和编译器特点
? 概念上的不同
? 基于解释执行的程序可以动态修改自身,
而基于编译执行的程序则需要动态编译技
术,难度较大。
? 基于解释方式有利于人机交互。
? 执行速度。解释器执行速度要慢。
? 空间开销。 解释器需要保存的信息较多,
空间开销大
? 利用解释器可自动生成编译器
二者实现技术相似。
编译器的功能结构图
表 处 理
错 误 处 理





































? 词法分析 (Lexical Analysis)
依循语言的词法规则,扫描源程序的字
符串,识别每一个单词,并将其表示成
所谓的机内表示 TOKEN形式。
? 语法分析 ( Syntax Analysis)
依据语言的语法规则,将单词的 Token序
列分解成各类语法短语,确定整个输入
串是否构成一个语法上正确的程序。
? 语义分析 ( Semantic Analysis)
审查源程序有无语义错误,为代码生成
阶段收集类型信息。
? 中间代码生成
( Intermediate Code Generate)
将源程序转换成一种称为中间代码的内
部表示形式。中间代码是一种简单的含义
明确的记号系统。
? 中间代码优化 ( Code Optimization)
变换或改造中间代码,生成的目标代码
更为高效,即节省时间和空间。
? 目标代码生成 ( Code Generation)
中间代码变换为特定机器上的绝对指令代码
或可重定位的指令代码或汇编指令代码。
? 表格管理 ( Symbol-Table Management)
为了合理的管理表格(构造、查找、更
新),设立一些专门子程序称为表格管
理程序负责管理表格。
? 错误处理 ( Error Detection and Reporting)
各个阶段还存在着错误处理模块, 当有
错误出现时, 由相应的错误处理模块给
出解决方案, 使得编译器能够继续进行
下去 。
编译程序的实现途径
? 预处理方法
用于语言的扩充。设已有 L语言的编译器,其扩充语言 L1的编
译器可通过语言转换程序将 L1程序转换为 L程序,利用 L的编
译器,从而实现 L1的编译器。
? 移植法
同一语言的编译器在 不同机器间的移植。方法:
a 目标代码的转换
b 修改中间代码到目标代码的转换
? 自展法 自我扩展,自己编写自己的编译器 。
? 工具法 利用编译阶段各个部分的自动生成工具自动生成。
? 理论法 利用形式化描述理论,实现自动化。
编译程序的作用
? 理解语言,编写出高效的代码
? 灵活设计实现自定义语言
? 提高软件设计技术
? 应用于涉及元级操作的实现
? 其它领域
第二章 一个微小语言 Micro的
编译器