47
指指指指 : 指指指 指指指指指指 指指指指 指指指指 : : 指指指 指指指 指指指指指指指

指导教师 : 杨建国 二零零七年十一月

Embed Size (px)

DESCRIPTION

编 译 原 理. 指导教师 : 杨建国. 指导教师 : 杨建国 二零零七年十一月. 二零零七年十月. 联 系 方 式. QQ : 383108986 MSN : [email protected] 电子邮件: [email protected] 个人网站: www.snwei.com( 盛威网 ). 《 编译原理 》 课程说明. 实际上课时间: 5* 16 周 理论和实践并重的课程 按要求完成相应的实验(包括实验报告)和作业 - PowerPoint PPT Presentation

Citation preview

Page 1: 指导教师 : 杨建国 二零零七年十一月

指导教师 : 杨建国二零零七年十一月

指导教师指导教师 :: 杨建国杨建国

二零零七年十月

Page 2: 指导教师 : 杨建国 二零零七年十一月

2

盛威网:专业的计算机学习网站

QQ : 383108986

MSN : [email protected]

电子邮件: [email protected]

个人网站: www.snwei.com( 盛威网 )

联 系 方 式

Page 3: 指导教师 : 杨建国 二零零七年十一月

3

盛威网:专业的计算机学习网站

《编译原理》课程说明实际上课时间: 5* 16 周理论和实践并重的课程按要求完成相应的实验(包括实验报告)和作业关于考试:作业、实验、考勤 30% ;上机考试 10 %;期 末考试 60% (迟到、早退、旷课、上机玩游戏和聊天、 带签名扣3分)

Page 4: 指导教师 : 杨建国 二零零七年十一月

4

盛威网:专业的计算机学习网站

开设《编译原理》目的

系统地向学生讲述编译系统的结构、工作流程及编译程序各组成部分的设计原理和实现技术,使学生通过本课程的学习之后,既掌握编译理论和方法方面的基本知识 , 也具有设计、实现、分析和维护编译程序等方面的初步能力

Page 5: 指导教师 : 杨建国 二零零七年十一月

5

盛威网:专业的计算机学习网站

《编译原理》知识结构

Page 6: 指导教师 : 杨建国 二零零七年十一月

6

盛威网:专业的计算机学习网站

教材:《编译原理》(第 2 版),张素琴、吕映芝、蒋维 杜、戴桂兰,清华大学出版社, 2005.10

参考书: ◎ 《编译技术》 ( 第二版 ) ,钱焕延,东南大学出版社, 2005.1

◎ 《编译原理课程设计》,王雷、刘志成、周晶,机械 工业出版社, 2005.3

◎ 《编译原理学习辅导》,张伟,清华大学出版社, 2005.7

《编译原理》教材及主要参考书

Page 7: 指导教师 : 杨建国 二零零七年十一月

7

盛威网:专业的计算机学习网站

《编译原理》教材及主要参考书

◎ 《编译原理习题与解析》,伍春香,清华大学出版社, 2001.8

◎ 《编译原理》,蒋立源,西北工业大学出版社, 1996.2

◎ 参考教案:清华大学教案、视频 ( 清华大学、东南大学、 北京交通大学、西北工业大学、四川电视大学 )

◎ 《编译原理》,何炎祥,高等教育出版社, 2004.8

◎ 《计算机编译原理-编译程序构造实践》,张幸儿,科 学出版社, 2005.7

Page 8: 指导教师 : 杨建国 二零零七年十一月

8

盛威网:专业的计算机学习网站

◎ 《编译原理》, Alfred V.Aho 、 Ravi Sethi Jeffery

D.Ullman 著,李建中、姜守旭译 ,机械工业出版社,    2006.2

◎ 《现代编译原理 C 语言描述》, Andrew W.Appel 著,赵克 佳、黄春、沈志宇译,人民邮电出版社, 2006. 4◎ 《编译原理及实践》, Kenneth C.Louden 著,冯博琴、冯 岚等译,机械工业出版社, 2003.3

《编译原理》教材及主要参考书

Page 9: 指导教师 : 杨建国 二零零七年十一月

9

盛威网:专业的计算机学习网站

编 译 原 理 教 案

第一章 引论

第二章 PL/O 编译程序的实现

第三章 文法和语言 第四章 词法分析

第五章 自顶向下语法分析方法

第六章 自底向上优先分析

第七章 LR 分析

Page 10: 指导教师 : 杨建国 二零零七年十一月

10

盛威网:专业的计算机学习网站

第八章 语法制导翻译和中间代码生成

第九章 符号表

第十章 目标程序运行时的存储组织

第十一章 代码优化

编 译 原 理 教 案

第十二章 代码生成

第十三章 编译程序的构造

第十四章 面向对象语言的编译

第十五章 编译程序的面向对象构造

Page 11: 指导教师 : 杨建国 二零零七年十一月

11

盛威网:专业的计算机学习网站

第一章 引论

第一节 程序设计语言

第二节 编译程序

第三节 源程序执行的途径

第四节 编译程序的结构

第五节 编译程序的开发

Page 12: 指导教师 : 杨建国 二零零七年十一月

12

盛威网:专业的计算机学习网站

知识结

Page 13: 指导教师 : 杨建国 二零零七年十一月

13

盛威网:专业的计算机学习网站

§1.1 程序设计语言

一 .机器语言

一般来说,计算机可以直接执行的代码形式的指令系统

 称为机器语言

第一章 引论

Page 14: 指导教师 : 杨建国 二零零七年十一月

14

盛威网:专业的计算机学习网站

例如,在国产 DJS——21 计算机中,取、除、减、送的

 指令代码分别为: 002 , 00E , 009 , 004假定 a 、 b 、 c 、 x 四个单元的地址码分别为: 0123 , 1234 ,

  2103 , 0576 ,那么要计算 x : = a / b – c 其机器语言程序为:

002 0123

00E 1234

009 2103

004 0576

Page 15: 指导教师 : 杨建国 二零零七年十一月

15

盛威网:专业的计算机学习网站

二 . 汇编语言

汇编语言就是计算机符号形式的指令系统

如对应于取、除、减、送采用下列符号: CLA , DIV ,

  SUB , STO

那么上述程序的汇编语言程序:

CLA a

DIV b

SUB c

STO x

Page 16: 指导教师 : 杨建国 二零零七年十一月

16

盛威网:专业的计算机学习网站

常用的高级语言: BASIC 、 FORTRAN 、 ALGOL 、

PASCAL 、 COBOL 、 C 等

三 .高级语言

上例用 BASIC 语言写为赋值语句为: x = a / b - c

用 PASCAL 语言写为赋值语句为: x:=a / b - c

Page 17: 指导教师 : 杨建国 二零零七年十一月

17

盛威网:专业的计算机学习网站

又如求半径为 r 的圆面积和周长的问题,用 PASCAL 语言

 编写的程序是:Program scr ( input , output ) ;

const pi = 3.1416 ;

var s, c, r : real ;

begin read ( r ) ;

s : = pi * sqr ( r ) ;

c : = 2 * pi * r ;

write ( r, s, c)

End.

Page 18: 指导教师 : 杨建国 二零零七年十一月

18

盛威网:专业的计算机学习网站

§1.2 编译程序

计算机实现程序设计语言的方法第一种方法:对程序进行翻译

第二种方法:对程序进行解释

源程序 翻译程序 目标程序

( A 语言) ( B 语言)(翻译)

汇编语言 汇编程序 机器语言

高级语言 编译程序 汇编(机器)语言

源程序 解释程序 无

Page 19: 指导教师 : 杨建国 二零零七年十一月

19

盛威网:专业的计算机学习网站

§1.3 源程序执行的途径

一 . 编译途径1.定义:将一份源程序从头至尾翻译成某台计算机上的机

    器语言,让机器接受,然后执行之,并允许重

    复执行若干次

Page 20: 指导教师 : 杨建国 二零零七年十一月

20

盛威网:专业的计算机学习网站

2. 两大阶段:

源程序

目标程序

运行结果

编译程序

运行程序初始数据

3.三大阶段:

编译

阶段

运行

阶段

汇编

阶段

源程序

目标代码

运行结果

编译程序

运行程序

汇编语言程序

汇编程序

初始数据

Page 21: 指导教师 : 杨建国 二零零七年十一月

21

盛威网:专业的计算机学习网站

二 . 解释途径

1.定义:就是对于源程序的一个语句,把它翻译成相应的

 机器语言 , 并让计算机立即执行

2. 解释执行阶段:

源程序 结 果解释程序

初始数据

Page 22: 指导教师 : 杨建国 二零零七年十一月

22

盛威网:专业的计算机学习网站

3. 两种方式:直接解释执行把源程序先转换成以词为单位的中间代码程序,然后对

 中间代码程序逐句解释执行

Page 23: 指导教师 : 杨建国 二零零七年十一月

23

盛威网:专业的计算机学习网站

§1. 4 编译程序的结构

一 . 编译程序的组成 1.单词和属性字:单词是指语言中具有独立意义的最小语法单位单词的属性是指单词特征和特性的有关信息属性字是指单词的一种机内表示属性字的特点:一是长度统一,二是刻划了单词的属性

属性字的组成:

单词类别 单词属性值

Page 24: 指导教师 : 杨建国 二零零七年十一月

24

盛威网:专业的计算机学习网站

2.编译程序的组成:

信 息 表 管 理 程 序

错 误 检 查 和 处 理 程 序

词法

分析

程序

语法

分析

程序

语义

分析

程序

中间

代码

生成

代码

优化

程序

目标

代码

生成

目标代码

Page 25: 指导教师 : 杨建国 二零零七年十一月

25

盛威网:专业的计算机学习网站

词法分析: 主要任务:从左到右扫描源程序,识别单词及其有关属性 ,

并转换成属性字例如:对于 PASCAL 语言中的赋值语句 x : = 2 * a + b

Page 26: 指导教师 : 杨建国 二零零七年十一月

26

盛威网:专业的计算机学习网站

语法分析:

主要任务:分析源程序的结构 , 判别它是否为相应程序设计

     语言中的一个合法程序

Page 27: 指导教师 : 杨建国 二零零七年十一月

27

盛威网:专业的计算机学习网站

三元式定义为如下形式:( op, a1, a2)

对于表达式: a + b * c / d

则有三元式:

( 1) ( *, b, c) (2) (/, (1), d) (3) (+, a , (2) )

于是 x : = 2 * a + b 的中间代码形式为:

( 1) ( *, 2, a) (2) (+, (1), b) (3) (:=, (2), x)

语义分析: 主要任务:根据语法结构分析其含义,并用某中间语言

     表示出来 ,亦就生成中间代码,或者直接生

     成目标代码

Page 28: 指导教师 : 杨建国 二零零七年十一月

28

盛威网:专业的计算机学习网站

中间代码生成: 使用中间语言的好处是使编译算法更加清晰,便于优

 化,还使编译程序的更多部分不依赖于目标机器常见的中间代码形式 : 逆波兰表示、三元式、四元式及

 树形结构等等

Page 29: 指导教师 : 杨建国 二零零七年十一月

29

盛威网:专业的计算机学习网站

代码优化:

主要任务:为了提高目标程序的质量而进行的工作。所

谓目标程序的优,就是尽量缩短运行时间和尽量最少占

用存储空间

Page 30: 指导教师 : 杨建国 二零零七年十一月

30

盛威网:专业的计算机学习网站

代码生成: 主要任务:完成从中间代码到目标代码的生成工作。如

果在语义分析时已直接生成了目标代码,则无需做此项

工作

Page 31: 指导教师 : 杨建国 二零零七年十一月

31

盛威网:专业的计算机学习网站

错误检查和处理程序:

主要任务:查错和纠错

Page 32: 指导教师 : 杨建国 二零零七年十一月

32

盛威网:专业的计算机学习网站

信息表管理程序: 主要任务:建立一批不同用途的表格 + 保持一些专用的表格一般信息表的登记项由关键字和与之相关联的信息组成

Page 33: 指导教师 : 杨建国 二零零七年十一月

33

盛威网:专业的计算机学习网站

例如求半径为 r 的圆面积和周长的问题,

用 PASCAL 语言编写的程序是:

3.编译程序的简单模型

Program scr ( input , output ) ; { 程序首部 }

var s, c, r : real ; { 说明 r, s, c 是实型变量 }

begin s : = pi * sqr ( r ) ; { 计算圆的面积 s }

c : = 2 * pi * r ; { 计算圆的周长 c }

End. { 程序结束 }

Page 34: 指导教师 : 杨建国 二零零七年十一月

34

盛威网:专业的计算机学习网站

(1) 词法分析:

Program scr ( input , output ) ;

var s , c , r : real ;

begin s : = 3.14 * sqr ( r ) ;

c : = 2 * 3.14 * r ;

End .

Page 35: 指导教师 : 杨建国 二零零七年十一月

35

盛威网:专业的计算机学习网站

(2) 语法分析: r

c : = 2 * 3.14 *

< 变量 >

< 常量 >

< 因子 >

< 项 >

< 乘除号 >

< 常量 >

< 因子 >

< 乘除号 >

< 变量 >

< 因子 >

< 项 > < 项

> < 表达式

>

< 赋值语句 >

Page 36: 指导教师 : 杨建国 二零零七年十一月

36

盛威网:专业的计算机学习网站

( 3 ) 语义分析:

( 1 ) ( *, 3.14, r )

( 2 ) (*, (1), r)

( 3 ) (:=, (2), s)

( 4 ) (*, 2, 3.14)

( 5 ) (*, (4) , r )

( 6 ) (:=, (5) , c)

( 4 ) 代码优化:

( 1 ) ( *, 3.14, r )

( 2 ) (*, (1), r)

( 3 ) (:=, (2), s)

( 4 ) (*, 6.28, r)

( 5 ) (:=, (4) , c )

思考:还可以怎么优化?答案: 3.14*r

Page 37: 指导教师 : 杨建国 二零零七年十一月

37

盛威网:专业的计算机学习网站

( 5 ) 目标代码生成:

( 1 ) ( *, 3.14, r )

( 2 ) (*, (1), r)

( 3 ) (:=, (2), s)

( 4 ) (*, 2, (1) )

( 5 ) (:=, (4) , c)

Page 38: 指导教师 : 杨建国 二零零七年十一月

38

盛威网:专业的计算机学习网站

二 .编译程序的逻辑结构1.编译程序的逻辑结构

源程序

词法分析

语法分析

语义分析

综 合

理 优 化

代码生成

目标程序

Page 39: 指导教师 : 杨建国 二零零七年十一月

39

盛威网:专业的计算机学习网站

2.编译程序的趟:

  所谓一趟是指一个编译程序在编译时刻把源程序或与之

等价的中间程序从头到尾扫描一遍,并转换成为紧密相邻的

等价程序的全过程

Page 40: 指导教师 : 杨建国 二零零七年十一月

40

盛威网:专业的计算机学习网站

单趟扫描:

源程序 目标程序

词法分析

语法分析 语义分析

优点:编译速度快、效率高、编译程序总长度短 缺点:编译程序复杂、占用存贮空间大

Page 41: 指导教师 : 杨建国 二零零七年十一月

41

盛威网:专业的计算机学习网站

多趟扫描:

源 程序 词法分析 等价程序 1 语法分析

等价程序 2 语义分析 等价程序 3

等价程序 4

优 化

代码生成 目标程序

优点:各趟所要完成的功能明确而单纯、编译程序较容

    易且便于分工、存贮空间节省 缺点:编译程序的总长度长、各趟的工作有些要重复进行、

    效率较低

Page 42: 指导教师 : 杨建国 二零零七年十一月

42

盛威网:专业的计算机学习网站

§1. 5 编译程序的开发

一 .编译程序的开发过程 1. 认真分析、合理分工

2.算法设计、方案确定

3.语言选择、编制程序

4. 调试程序、确保质量

5. 资料整理、文本形成

Page 43: 指导教师 : 杨建国 二零零七年十一月

43

盛威网:专业的计算机学习网站

二 .编译程序的开发技术1. 系统程序设计语言(系统编程语言):

能编写编译程序或其它系统软件的高级语言

Page 44: 指导教师 : 杨建国 二零零七年十一月

44

盛威网:专业的计算机学习网站

2.编译程序的开发技术: 自编译:用某一高级语言书写其本身的编译程序 交叉编译: A 机器上的编译程序能产生 B 机器上的目标

 代码

Page 45: 指导教师 : 杨建国 二零零七年十一月

45

盛威网:专业的计算机学习网站

自展:首先确定一个非常简单的核心语言 L0 ,用机器语

 言或汇编语言书写出它的编译程序 T0 ,再把语言 L0扩充

 到 L1 ,此时 L0 L1 并用 L0 编写 L1 的编译程序 T1 ,再把

 语言 L1扩充为 L2 ,有 L1 L2 并用 L1 编写 L2 的编译程序

  T2 ,,如此逐步扩展下去,好似滚雪球一样,直到

 我们所要求的编译程序 移植:将 A 机器上的某高级语言的编译程序搬到 B 机

 器上运行

Page 46: 指导教师 : 杨建国 二零零七年十一月

46

盛威网:专业的计算机学习网站

3.编译程序的自动生成问题 :

源语言的定义

机器语言的描述

编译程序

自动生成软件编译程序

如 UNIX操作系统下的软件工具 Lex 和 Yacc 等编译程序生成软件工具还有 LLama 和 Occs

形式语言学和编译技术的发展已能实现编译程序的自动生

 成,但是目前的主要问题是时间效率和空间节省问题

Page 47: 指导教师 : 杨建国 二零零七年十一月

47

盛威网:专业的计算机学习网站

第 1 章 作业题

P11 :

1.

2.

3.

4.