编译原理 第1章+概述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
John von Neumann 冯•诺依曼
1949 EDSAC 冯·诺依曼计算机
9
1.机器语言(第一代语言) 1.机器语言(第一代语言)
(1)定义: (1)定义: 由机器指令构成的语言称机器语言,即用二进制 编码组成。如 01110101 机器指令:是二进制编码,基本上是由操作码和 地址码两部分组成,所以要用机器语言编程序一 定要知道多种不同的操作码。
24
翻译程序
翻译程序 将一种语言程序(称为源程序)改造成另一种等价 将一种语言程序(称为源程序)改造成另一种等价 的语言程序(称为目标程序)的程序。 的语言程序(称为目标程序)的程序。 源语言 书写源程序的语言称为源语言. 书写源程序的语言称为源语言. 目标语言 书写目标程序的语言称为目标语言. 书写目标程序的语言称为目标语言.
2
课程性质目的和任务
是一门计算机专业课程 通过本课程的学习能对高级程序设计语言 如何翻译成计算机硬件能够识别的机器语 言的整个编译过程有较好的理解 能够从理论上掌握编译( 能够从理论上掌握编译(例如词法分析和语 法分析等) 法分析等)的几种经典算法,能够应用于实 践中。
3
教学内容
第一章 引论 第二章 语言的基本知识 第三章 词法分析 第四章 语法分析 第五章 语法制导翻译技术
27
二、解释程序
解释程序:将高级语言写的源程序作为输入数据,但并不产生目标 解释程序:将高级语言写的源程序作为输入数据,但并不产生目标 程序,而是边解释边执行源程序本身的一种程序。如下图 源程序 解 结 释 果 程 数 初始数据 序 据 解释程序执行过程 解释程序适合于会话型 解释程序适合于会话型语言,如BASIC语言。解释程序主要优点是易 会话型语言,如BASIC语言。解释程序主要优点 优点是易 于为用户提供调试功能,对源程序的语法分析及出错处理都很及时,修 改调试也很方便,但是解释程序执行速度较慢,运行效率低。
18
1964年由美国达特茅斯大学研制,BASIC语言不仅用于科 1964年由美国达特茅斯大学研制,BASIC语言不仅用于科 学计算,还用于事务处理,且具有简单易学的特点。是许多 大中专院校的启蒙教学语言。
美国达特茅斯学院 约翰· 约翰·凯梅尼 (J. Kemeny) Kemeny) 和托马斯·卡茨(T.Kurtz) 和托马斯·卡茨(T.Kurtz)
目标程序 源程序 编译程序 (机器语言) 机器语言)
编译阶段
目标程序 源程序 编译程序 (汇编语言) 汇编语言) 汇编程序 目标程序 (机器语言) 机器语言)
编译阶段
汇编阶段
目标程序 (机器语言) 机器语言) 运行系统 可执行程序 结果数据
运行阶段
30
上述三种翻译程序,汇编程序最容易实现, 其次是解释程序,编译程序最难。所以只 要掌握了编译程序实现方法,汇编程序和 解释程序就迎刃而解了。下面我们就具体 介绍一下编译程序…… 介绍一下编译程序……
法语言) 法语言)
③ COBOL语言(COmmon Business COBOL语言
Oriented Language 面向商业通用语言) 面向商业通用语言)
14
IBM公司程序师 IBM公司程序师 约翰·巴科斯(J.Backus) 约翰·巴科斯(J.Backus)
15
艾伦·佩利 (艾伦J .Perlis) 艾伦J
28
三、编译程序
编译程序 是将高级语言写的源程序翻译成目标语言(汇编 语言、机器语言)的程序。这种翻译过程称为编 语言、机器语言)的程序。这种翻译过程称为编 译。 编译系统 目标程序,再加上运行系统(如服务子程序、动 态分配程序、装配程序等)就可获得计算结果, 整个系统称为编译系统。
29
编译程序执行过程
4
第一章 引 论
§1.1 程序设计语言和翻译程序 §1.2 编译过程概述 §1.3 编译程序的生成
5
第一章 引 论
§1.1 程序设计语言和翻译程序
程序设计语言 一、语言的概念和分类 二、程序设计语言简述
翻译程序 一、汇编程序 二、解释程序 三、编译程序
6
一、语言的概念和分类
1.概念 1.概念 2.语言的分类 2.语言的分类 (1)自然语言 (1)自然语言 (2)数理语言 (2)数理语言 (3)程序设计语言 (3)程序设计语言
编
Compiler Pr源自文库nciples
译
原
理
南京邮电大学软件学院 管有庆 guanyouq@njupt.edu.cn
1
教材及参考资料
教材 王汝传. 编译技术原理及其实现方法. 王汝传. 编译技术原理及其实现方法. 成都: 成都科技大学出版社, 成都科技大学出版社, 1998. 参考书 [1] 吕映芝,张素琴,蒋维杜.编译原理. 北京:清华大学出版社,1998. 北京:清华大学出版社,1998. [2] 陈火旺等.程序设计语言编译原理. 北京:国防工业出版社,2000. 北京:国防工业出版社,2000.
C
20
4)多范型程序设计语言时期 4)多范型程序设计语言时期 ① 函数式语言 典型函数式语言,如LISP、APL、ML等。 典型函数式语言,如LISP、APL、ML等。 ② 逻辑式语言 其代表语言是PROLOG 其代表语言是PROLOG ③ 面向对象式语言 smalltalk、C++、java、C#等都是面向对象式语言。 smalltalk、C++、java、C#等都是面向对象式语言。 C++
12
3.高级程序设计语言( 3.高级程序设计语言(第三代语言)
——50年代中期提出 ——50年代中期提出 1956年,第一个高级程序设计语言 1956年,第一个高级程序设计语言 FORTRAN(FORmulaTRANslator)正式开始使用。 FORTRAN(FORmulaTRANslator)正式开始使用。
7
二、程序设计语言简述
1.机器语言(第一代语言) 1.机器语言(第一代语言) 2.汇编语言(第二代语言:50年代中期出现) 2.汇编语言(第二代语言:50年代中期出现) 3.高级程序设计语言(第三代语言:50年代 3.高级程序设计语言(第三代语言:50年代 中期提出) 4.超高级程序设计语言(第四代语言) 4.超高级程序设计语言(第四代语言)
19
3)结构程序设计时期 3)结构程序设计时期
① ② ③ ④ PASCAL语言 PASCAL语言 MODULA-2语言 MODULAAda语言 Ada语言 C语言
AT&T贝尔实验室的 AT&T贝尔实验室的 邓尼斯· 邓尼斯·里奇 (D.Ritchie) D.Ritchie) 和肯·汤姆森(K. Thompson) 和肯·汤姆森(K. Thompson)
25
翻译程序
一、汇编程序 一、汇编程序 二、解释程序 三、编译程序
26
一、汇编程序
汇编程序:把汇编语言写的源程序翻译成机器语言的目标程序, 汇编程序:把汇编语言写的源程序翻译成机器语言的目标程序, 这个翻译过程称为汇编 这个翻译过程称为汇编。如下图: 汇编。如下图: 初始数据 汇编 源程序 汇编程序 目标程序 结果数据 汇编程序执行过程 汇编程序一般对源程序进行两遍扫描来完成。 第一遍:进行存贮分配,造出第二遍扫描时用的各种表格; 第二遍:用机器语言操作码来代替汇编符号操作码。
第四代语言主要包括 : 1)数据库及其查询语言,如;SQL; )数据库及其查询语言,如;SQL; 2)应用生成程序; 3)可执行规格说明语言。目前问世的第四代语言有ADF、MAPPER )可执行规格说明语言。目前问世的第四代语言有ADF、
(2)特点
1)语言功能强,效率高,使用方便 2)开发应用系统修改方便、维护容易 3)系统复杂,不但要编译还要生成程序。
(1)定义
高级程序设计语言是一种面向过程语言 (不是面向机器),它用一些符号和数字对实 际问题进行描述的语言,也称过程化语言。
13
(2)分类(按发展时间) 1)高级语言初始时期 1)高级语言初始时期 ① FORTRAN语言 (FORmula FORTRAN语言 TRANslator 公式翻译 ) ② ALGOL语言 (ALGOrithmic Language 算 ALGOL语言
(3)高级语言的特点 (3)高级语言的特点
1)直观、易写易读工作量小 2)不依赖于具体的机器 3)便于程序交流 4)不可直接在计算机上运行,经编译程序编译成 机器语言后方可运行。
22
4.超高级程序设计语言(第四代语言) 4.超高级程序设计语言(第四代语言)
(1)定义 只需指出所求问题、输入数据及输出形式,就能得出输出 结果,无需对算法和计算过程描述的语言。
31
§1.2 编译过程概述
一、编译步骤 二、编译过程简述 三、趟程(遍)
32
一、编译步骤
类似于外文资料的翻译过程: 读一个个字母(字符) 构成独立单词 法关系 初步译成中文 加工修改
16
商业通用语言语言开发小组
17
2)高级语言发展时期 2)高级语言发展时期
① LISP语言(LISt Processor 表处理) LISP语言(LISt ② APL语言(A Programming Language) APL语言(A ③ SNOBOL语言(String Oriented Symbol SNOBOL语言(String Language 面向字符串符号的语言) 面向字符串符号的语言) ④ PL/1语言(Pogramming Language) PL/1语言(Pogramming ⑤ SIMULA语言 (仿真语言) SIMULA语言 仿真语言) ⑥ BASIC语言(Beginner All-purpose Sybolic BASIC语言(Beginner AllInstructor Code 初学者通用符指令码)
8
电子计算机之父 计算机工作原理
计算机的两个基本能力:一是能够存储程序, 计算机的两个基本能力:一是能够存储程序,二是能 够自动地执行程序。 够自动地执行程序。 计算机是利用“存储器” 内存) 计算机是利用“存储器”(内存)来存放所要执行的 程序的,而称之为CPU的部件可以依次从存储器中取 程序的,而称之为CPU的部件可以依次从存储器中取 出程序中的每一条指令,并加以分析和执行, 出程序中的每一条指令,并加以分析和执行,直至完 成全部指令任务为止。 成全部指令任务为止。
23
下面我们对程序设计语言做一下总结
机器语言(第一代) 机器语言(第一代) 低级语言 汇编语言(第二代) 汇编语言(第二代) 初期 :FORTRAN、ALGOL、COBOL FORTRAN、ALGOL、 发展期 :LISP、APL、SNOBOL、PL/1、 LISP、APL、SNOBOL、PL/1、 (第三代) 第三代) SIMULA、 SIMULA、BASIC 程序设计语言 高级语言 结构化时期 :PASCAL、MODULA-2、Ada、C PASCAL、MODULA- Ada、 函数式:ML、LISP、 函数式:ML、LISP、APL 多范型时期 逻辑式:PROLOG 逻辑式:PROLOG 面向对象:Smalltalk、C++、 面向对象:Smalltalk、C++、Java 第四代) SQL 网络 :Java、Perl、C# Java、Perl、 (第四代) 超高级语言 报表语言 MAPPER
10
1.机器语言(第一代语言) 1.机器语言(第一代语言)
(2)特点: 费时费事 难懂容易错 只能在一种型号计算机上运行 可以直接在计算机上运行
11
2.汇编语言(第二代语言:50年代中期出现) 2.汇编语言(第二代语言:50年代中期出现)
(1)定义 (1)定义
用容易记忆的符号来代替机器指令中操作码和地 址码的一种语言. 址码的一种语言. 如: ADD 代表“+” SUB代表“-” MOV代表“传递” 代表“+” SUB代表“MOV代表“传递” (2)特点 (2)特点 程序直观容易阅读 优点 编程工作量小 只能在一种型号机器上运行 缺点 不能直接在计算机上运行
贝尔实验室另一研究人员比加尼· 贝尔实验室另一研究人员比加尼·斯楚士舒普 (B.Stroustrup) B.Stroustrup) 把C语言扩展成一种面向对象的程序设计语言C++ 语言扩展成一种面向对象的程序设计语言C++
④ 网络语言 如:JAVA,PERL,C#等 如:JAVA,PERL,C#等
21