计算机编译chapt1

上传人:xy****7 文档编号:94168063 上传时间:2019-08-03 格式:PPT 页数:54 大小:176KB
返回 下载 相关 举报
计算机编译chapt1_第1页
第1页 / 共54页
计算机编译chapt1_第2页
第2页 / 共54页
计算机编译chapt1_第3页
第3页 / 共54页
计算机编译chapt1_第4页
第4页 / 共54页
计算机编译chapt1_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《计算机编译chapt1》由会员分享,可在线阅读,更多相关《计算机编译chapt1(54页珍藏版)》请在金锄头文库上搜索。

1、0 程序设计语言与编译,任课教师: 王晓斌 806教研室 主楼中335,开场白,一. 引子 1. 自我介绍 2. 题外话: 假期结束了,开学了 学与玩 关于笔记 How to pass? 我的初衷,二. 参考书 1. 龚天富,李广星, 高级程序设计语言概论 2. 陈大旺等,程序设计语言编译原理,三. 关于教学 1. 课程设置: 64学时 +24学时 2. 先修课程:, 或者 3. 教学安排 (参照目录讲学时安排,习题课及实验开始时间) 4. 答疑: 根据情况安排 5. 交作业: 根据进度,布置作业后一周,第一章 绪论,第一节 引言 1.程序设计语言的产生 人机通信、人机交流 2.程序设计语言的

2、发展 机器语言汇编语言高级语言 (说明翻译,解释,汇编,编译等概念),3.高级语言的特点 直观、自然、易于理解 易读,易写,易于交流、出版和存档 一般都是独立于机器的,易于移植 4.本书的目标 介绍程序设计语言的设计和实现的最基本的理论和技术;提高鉴赏和评估语言的能力 在了解语言的重要概念、功能和限制的基础上,以便具有选择、设计和实现程序设计语言的能力,第二节 语言的定义,语法:用以构造程序及其成分的一组规则 的集合 语义:用以规定语法正确的程序或其成分的含义的一组规则的集合,一.语法 1.几个术语 字母表:语言允许使用字符的集合,其元素称为字符 符号:由字符组成的有限串(字符串) 字汇表:由

3、符号组成的集合,其元素称为字 词法规则:规定什么样的字符串可以构成语言的有效符号 语法规则:确定一个符号序列是否为一个句子,并提供句子的结构(什么样的符号序列是合法的),2. 生成的观点 一个简单英语句子的描述 I/Students study/run. 文法:语言的一个完整的语法描述,记为(N,T,P,S) I|Students study|run 语言:所有句子的集合,”标识符”和”表达式”的定义(递归定义) (注意递归的结束条件) 标识符 A|B|X|Y|Z|a|b|x|y|z 0|1|2|3|4|5|6|7|8|9,表达式 () +|-|*|/,3.识别的观点 用语法图来定义给定的语言

4、 语法图的构造 N1|2|n对应一个语法图 终结符x 非终结符N N1|2|n,12m |,识别原则:若一个终结符序列是合法的,那么,必须从语法图的入口边通过语法图而到达出口边,而且在通过的过程中,恰恰能识别该终结符序列。 .终结符框 .非终结符框 .分支、回溯 参见图1-6、图1-7、图1-8、图1-9 语言:语法图能识别的所有终结符序列的集合。,标识符,表达式,运算符,表达式,(,),表达式,表达式,字母,字母,数字,标识符,字母,字母,数字,表达式,表达式,(,),表达式,+,表达式,-,*,/,+,-,*,/,运算符,图1-6,图1-7,图1-8,图1-9,4.语法描述的基本用途 表达

5、语言设计者的意图和设计目标; 指导语言的使用者如何写一个正确的程序; 指导语言的实现者如何编写一个语法检查程序来识别所有合法的程序。,二.语义 例:大象吃花生 Elephants eat peanuts. 1.何谓语义? 定义语言合法句子的含义,即句子的作用和意义。 2. GAM的结构 指令指针+代码存储器C +数据存储器D 举例:若懂汉语,可以将任何外语以汉语解释;亦即理解了汉语则理解了外语.,ip,代码存储器(C),数据存储器(D),第三节 强制式语言,语言分类: 强制式(命令式或面向语句) Imperative language Statement-oriented Command La

6、nguage 函数式Functional language 逻辑式Logic Programming 面向对象Object-oriented,一. 冯.诺依曼体系结构 1.基础 一个存储器,一个控制器,一个处理器 2.特点 数据或指令以二进制形式存储; “存储程序”的工作方式; 程序顺序执行; 存储器的内容可以被修改。,数据存储器(D),3.在命令式语言上的表现 变量 存储单元及它的名称由变量的概念来代替。可以代表一个或一组单元,可以修改。 赋值 计算结果必须存储。 重复 因语句顺序执行,指令存储在有限的存储器中,完成复杂计算时必须重复执行某些指令序列。,二. 绑定(Binding)概念 1.

7、 属性:实体具有的特性。如变量,子程序,语句等均为实体。 2. 绑定:一个对象(或事物)与其某种属性建立起某种联系的过程。 3. 描述符:用以描述实体的属性的符号、语句或表格等。亦即实体到属性的映象。,4. “静态”和“动态”特性: 凡是在编译时能确定的特性,称为静态的; 凡是在运行时才能确定的属性称为动态的。 举例:动态数组和静态数组。数组的属性有保留其值的存储区。,三. 变量 变量是对一个(或若干个)存储单元的抽象,赋值语句则是修改存储单元内容的抽象。 变量除名字外,具有四个属性:作用域、生存期、值和类型。,1.变量的作用域 变量的作用域是指可以访问该变量的程序范围。 静态作用域绑定:按照

8、程序的语法结构定义变量的作用域。 动态作用域绑定:按照程序的执行动态地定义变量的作用域。,2.变量的生存期 一个存储区绑定于一个变量的时间区间,称为变量的生存期。 数据对象:存储区和它保存的值 分配:变量获得存储区的活动 举例说明静态分配和动态分配。,3.变量的值存储区单元的内容 匿名变量的访问通过指针实现 变量与它的值的绑定是动态的 符号常数的值不能修改 变量的初始化 不初始化则出错 随机 缺省值0,4.变量的类型 类型的定义:变量的类型可以看成与变量相关联的值的类,以及对这些值进行的操作的说明。 类型可用来解释变量绑定的存储区的内容(二进制位串)的意义; 语言定义时,类型名通常绑定于某一个

9、值类和某一组操作; 语言实现时,值和操作绑定于某种机器二进制表示。,静态绑定:通过说明语句完成 如:Pascal、Fortran 动态绑定:执行时隐式说明,且动态变化 如:APL A5 整型 A 标号、转到A A 1 2 51 0 一维数组 A2:3 0 二维数组 A 0 A B+C,四.虚拟机 1.虚拟机是由软件实现的机器 M1是实际的机器,执行二进制机器语言 若汇编语言是虚拟机M2的机器语言,则 M2=M1+汇编程序 若高级语言是虚拟机M3的机器语言,则 M3=M2+编译程序,2.虚拟机与抽象机的不同 虚拟机是在一台实际机器上配置某种软件扩大其功能而实现的;而抽象机仅仅是一个抽象模型,并不

10、要求与之匹配的实际机器存在。,五. 主要的强制式语言及其关系,1.程序单元:程序执行过程中的独立调用单元。如子程序,分程序,过程等。 2.单元表示 编译时,一个单元的源程序。 运行时,单元表示由一个代码段和一个活动记录组成,称为单元实例。 3.活动记录:执行单元所需要的信息,以及该单元的局部变量所绑定的数据对象的存储区。,第四节 程序单元,数据存储器(D),4.非局部变量:一个程序单元可以引用未被本单元说明而被其它单元说明的变量。 5.引用环境:局部变量+非局部变量。 6.别名:同一单元的引用环境中有两个变量绑定于同一数据对象,称这些变量具有别名。,7.副作用的产生:对绑定于一个非局部变量的对

11、象进行修改。 8.程序单元可以递归激活,从而一个单元可以有很多个实例,但代码段相同。不同的仅仅是活动记录。 9.静态分配和动态分配 Fortran Pascal 或C,随着计算机技术的发展,计算机应用也日益广泛,已经渗透到社会的各个领域,对程序设计语言也提出了新的要求(诸如可维护性,可靠性,可移植性等),从而促进了语言的发展。,第五节 程序设计语言发展简介,一. 早期的高级语言(50年代) 追求效率 1. FORTRAN FORmula TRANslation .主要用于科学计算 .子程序独立编译 .COMMON语句实现了模块之间的通信,2. ALGOL 60 ALGOrithmic Lang

12、uage 60 .主要用于科学计算 .引入了分程序结构和递归过程 .采用BNF形式描述语法,3. COBOL COmmon Business Oriented Language .广泛应用于各种事务处理领域 .引入了文件和数据描述 .类自然语言程序描述,二.早期的突破 60年代初,不再盲目地追求效率,出现了基于良好刻画数学原则的语言。 1. LISP .具有很强的符号处理能力 .统一的数据结构 .数据和程序统一的表示方法 .其基础是函数和函数作用,2. APL .支持函数式程序设计风格 .广泛应用于涉及大量矩阵运算的科学计算中 .具有丰富的操作符,3. SNOBOL 4 .主要用于字符串处理

13、.给出了一种与机器无关的宏功能,增加了程序的可移植性,三. 概念的集成(64年) PL/1 .希望将所有语言概念集成大全 .分程序概念和递归过程 .数据描述机能 .动态数据结构 .异常处理 .多任务机能 .可用于科学数值计算,数据处理和开发 系统软件 .难以得到广泛的应用,四. 再一次突破(60年代后期) 引入了许多有趣的概念 1. ALGOL 68 .以零型文法描述 .引入正交性和通用性原则,2. SIMULA67 .应用于模拟领域 .增加了一个特殊结构协同程序 .引入了类的概念 3. PASCAL .具有明显的简洁性 .体现结构程序设计思想 .具有用户自定义类型,4. BASIC .简单易

14、学 .交互式工作环境 .解释执行,五. 大量的探索 70年代,支持系统软件开发 1. 语言研究 涉及抽象数据类型,异常处理和并行处理机制 2. MODULA-2 .支持模块结构,模块可以独立编译 .面向实时系统和并行系统综合功能,3. C CPLBCPLBC .C的最大特点是具有高级语言和低级 语言的优点 .应用于各种领域,六. Ada和第四代语言 70年代以后,注重可移植性 1. Ada .面向专门领域的特殊要求 .是在引入了一个不大的,容易理解的 概念集合的基础上开发的 .是直接体现许多现代软件设计方法学 的语言 .提高程序的可读性,可靠性,可维护性,2. 第四代语言超高级语言 面向问题 .表达力更强,使用更方便,更接近于 问题的描述 .着重关心的是”做什么”,七. 新一代程序设计语言 以抛弃冯.诺依曼概念为基础,包括函数式,对象式,逻辑式,第一章习题,1. 必做题: 1-2、1-6、1-11 2. 思考题: 1-3、1-5、1-10、1-12、1-14,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号