第1章编译原理概述剖析
2018年12月23日星期
第14页
什么是编译原理
编译原理是讨论编译程序设计的基本理论、 基本概念、基本方法
2018年12月23日星期
第15页
1.2 编译过程概述
1、逻辑上分五个阶段:词法分析、语法分析、语义
分析与中间代码生成、代码优化、目标代码生成 每个阶段把源程序从一种表示变换成另一种表示
编译原理
教材及主要参考资料
教材:编译原理及实践教程,黄贤英,清华大学出
版社
主要参考资料: 编译原理,陈火旺,国防工业出版社 编译原理(原书第2版)(龙书) ,ALFRED V.AHO
etc著,赵建华 郑滔等译 ,机械工业出版社 ,2008.12 社
程序设计语言编译方法,肖军模,大连理工大学出版 编译原理,张素琴,吕映芝,清华大学出版社
更多教材及参考资料参见编译原理精品课程网站。
第2页
C语言程序
void main( ) { int x,y,z; x=3; y=2; z=x+y; }
在内存中:
序言
内存地址 内存内容
单元名字
……
……
……
x:局部变量
y:局部变量 z:局部变量
200H
202H 204H ……
3
2 5 ……
数 据 区
源程序
编译器
目标程序
词 法 分 析
2018年12月23日星期
语 法 分 析
语义分 析与中 间代码 生成
代 码 优 化
目标 代码 生成
第16页
按照词法分析、语法分析、语义分析等这种方式来 划分阶段的原因是:每个阶段的复杂程度不同,所 依据的理论基础不同,实现时采用的方法也不同。 主要是方便理解和实现。 划分阶段的依据是什么?每个阶段所实现的功能相 对独立。
2018年12月23日星期 第9页
翻译程序所处的层次
语言处 理程序
Fortran语言
Hale Waihona Puke Fortran编译程序高 级 语 言
C 语 言
操作系统
C 编译 程序
计算机硬件 汇编语言
Basic解释程序
Basic语言
. . . . . .
. . . . . .
2018年12月23日星期
第10页
编译程序
源程序
汇编程序
汇编程序
机器语言层
机器语言1 计算机1
机器语言2 计算机2
第8页
2018年12月23日星期
什么叫翻译程序
翻译程序:能够将某种语言写的程序转换成 另一种语言的程序,而且后者与前者在逻辑 上是等价的。 编译程序:将高级程序设计语言程序翻译成 逻辑上等价的低级语言(汇编语言,机器语言) 程序的翻译程序。 解释程序:将高级程序设计语言写的源程序 作为输入,边解释边执行源程序本身,而不 产生目标程序的翻译程序。
2018年12月23日星期
第12页
编译程序的分类
诊断编译程序 优化编译程序 可变目标编译程序 交叉编译程序
2018年12月23日星期
第13页
编译器的伙伴
编辑器(editor) 预处理器(Preprocessor)
将源程序汇集到一起,宏展开等
汇编程序(assembler) 连接程序(linker) 连接系统函数与系统资源 装入程序(loader) 重定位(relocation) Debugger,Profiler,Project Manager
汇 编 语 言 程 序
mov ax,3 mov x,ax mov bx,2 mov y,bx add ax,bx mov z,ax ......
300H
302H 304H 306H 308H ......
3A03
3AE1 3A02 3AE2 DA6C 3A71
代 码 区
第一章
编译原理概述
本章要求
2018年12月23日星期
第17页
用一个例子说明各阶段的功能
/*一个PASCAL语言的源程序*/ program test; /*this is an example,computing an area*/ var area, length, width: integer; begin length:=5;width:=5; area := 5+length *width+length *width end.
主要内容:各种翻译程序的概念,编译 过程和阶段划分,编译程序的组成和结 构,编译程序的构造方法 重点掌握:编译程序工作的基本过程及 其各阶段的基本任务,编译程序总框。
第5页
1.1 程序设计语言与翻译程序
为什么要使用编译程序?
机器语言 (machine language)
C7 06 0000 0002
汇编语言 (assembler language)
MOV X , 2
高级语言 (high-level language)
X=2
第6页
为什么要使用编译程序?
机器语言 (machine language)
C7 06 0000 0002
汇编语言 (assembler language)
MOV X , 2
2018年12月23日星期
第18页
第一阶段:词法分析
任务: 从左到右扫描源程序,识别出每个单词 o 附加任务:a、滤掉空格 b、去掉注释 o 单词符号是语言的基本组成成分 o 词法分析的工作主要依据语言中单词的构成规则 o 单词的种类: (1) 标识符 (2) 关键字(char、int、if、else、while、for等) (3) 运算符(即运算符号 +、-、*、/、&等) (4) 界符(常见的有 ; , : ( )等) (5) 常数
编译程序 目标程序 结果
输入数据
计算机运行
解释程序
源程序 解释程序 结果
输入数据
2018年12月23日星期 第11页
对编译程序的一些说明
编译程序实质上是一个翻译程序,要注意等价变换 本课程的任务就是讲解在这个转换过程中所涉及到 的一些理论和方法,最后,使用这些理论和方法, 自己编写一个小的编译器 转换是一个总体的功能,要抓住总体结构,逐层细 分,写编译器时要体现软件工程中软件设计的原则, 自顶向下,逐层分解。 编译器要完成的转换任务相当复杂,实现编译器时 必须分步骤分阶段实现。分阶段实现的好处是能够 简化程序的设计,当然也可以不分阶段实现。
高级语言 (high-level language)
X=2
2018年12月23日星期
第7页
计算机中的语言层次和翻译程序
转换 程序 编译程序1
高级语言层
高级语言1
高级语言2 交叉编 译程序
高级语言3 编译程序3
高级语言4 编译程序4
解释程序1
编译程序2 汇编语言1 反汇编 程序
汇编语言层
汇编语言2 交叉汇 编程序