文章目录
第一节 引言
1. 程序设计语言的产生
-
语言本质:一组规则的组合
- 字母表的定义
- 词法规则
单词符号的形成规则 - 语法规则
语法单位的形成规则
短语,从句,句子,段落,文章 - 语义规则
单词符号和语法单位的含义规则 - 语用规则
语义规则的发展和延伸
语境,上下文->语义
-
程序设计
给出解决特定问题的方法和过程,并以某种程序设计语言为工具,编写出该语言的程序。 -
程序设计语言
- 字母表的定义
- 词法规则
单词符号的形成规则
C语言中包括关键字,标识符,运算符,常量,分界符 - 语法规则
语法单位的形成规则
表达式,语句,函数,程序 - 语义规则
单词符号和语法单位的含义规则 - 语用规则
语义规则的发展和延伸
例如*,乘法or指针or指针类型说明符 - 其他规则
包括类型使用规则,参数传递规则,作用域规则
2. 程序设计语言的发展
机器语言 —》汇编语言 —》高级语言
与机器相关的语言为低级语言
与机器无关的语言为高级语言
3. 翻译与执行
-
高级语言和汇编语言翻译为机器语言才能执行
将汇编语言程序翻译为机器语言程序的程序称为汇编程序(汇编器)
将高级语言程序翻译为机器语言程序的程序称为编译程序(编译器)
编写一个高级语言的编译程序的工作,通常称为对这个语言的实现 -
解释:语言的另一种翻译与执行方式
BASIC是最简单的解释型高级语言,它是由BASIC的解释程序对源程序进行分析(解释)并直接计算出结果。例如,LISP,ML,Prolog,Smalltalk,Java
解释执行特别适合于动态语言和交互式环境,便于人机对话。解释器边解释边解释执行,重复执行的语句需要重复翻译,比编译执行要花去更多的时间,执行效率较低。Baidu:编译 VS 解释
一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。
4. 三种语言与三种程序
源语言、宿主语言、目标语言
源程序、翻译程序、目标程序
5. 语言的设计与实现
高级语言涉及的三类人:设计者、实现者、使用者
确定一个高级语言的各种规则的工作称为对这个语言的设计
编写一个高级语言编译器的工作,称为对这个语言的实现
第二节 强制式语言
1. 程序设计语言的分类
-
按设计的理论基础分为4类语言:
强制式语言:基础是冯·诺伊曼模型
函数式语言:基础是数学函数(函数运算)
逻辑式语言:基础是数理逻辑、谓词演算
对象式语言:基础是抽象数据类型 -
按语言的发展进程分类:
第一代语言:机器语言
第二代语言:汇编语言
第三代语言:高级语言
第四代语言:说明性语言,超高级语言(sql, Matlab)
新一代语言:函数式,逻辑式语言
2. 冯·诺伊曼体系结构
-
(1)构成基础
存储器、控制器、处理器、ip
-
(2)特点
数据、指令以二进制形式存储
存储程序的工作方式:
程序顺序执行,可强制修改执行顺序
存储器的内容可以被修改 -
(3)在命令式语言上的表现
变量:存储单元由变量的概念替代,变量可以代表一个或一组单元
赋值:存储计算结果
重复:语句顺序执行,指令存储在有限的存储器中,完成复杂计算时需要重复执行某些指令序列
3. 绑定的概念
-
基本概念
实体:程序的组成部分,如变量,表达式,程序单元等
属性:实体具有的特性
绑定:实体与其各种属性建立联系的过程称为绑定
描述符描述实体属性的表格 -
静态和动态特性
编译时能确定的特性:静态特性
运行时才能确定的特性:动态特性若绑定在编译时完成,且在运行时不会改变,称为静态绑定
若绑定在运行时完成,称为动态绑定Java中把一个方法与其所在的类/对象 关联起来叫做方法的绑定。绑定分为静态绑定(前期绑定)和动态绑定(后期绑定)。
4. 变量
变量的4个属性:作用域、生存期、值、类型
变量时对一个或若干个存储单元的抽象;
一个存储单元至少一个字节构成;
一个变量至少占用一个存储单元;
变量用名字来标识(也存在匿名变量);
赋值是对修改存储单元内容的抽象。
-
(1)变量的作用域
可以访问该变量的程序范围
静态作用域绑定:
按照程序的结构定义变量的作用域(C等);
依据定义变量的位置进行
动态作用域绑定:
按照过程的调用关系动态的定义变量的作用域(SNOBL4等)。 -
(2)变量的生存期
变量绑定于存储区的时间区间
变量获得存储区的活动称为分配
变量分配的存储单元的个数称为变量长度静态分配
全局变量(C,C++语言)
运行前分配局部变量存储区(FORTRAN语言)动态分配
运行时分配局部变量存储区(C、C++语言)
通过两种途径来实现:
运行变量所对应的程序单元自动分配;
相关的语句显式提出请求(new)匿名变量
访问匿名变量的基本方法是通过访问路径(指针)来实现的。一般属于动态分配。 -
(3)变量的值
变量的值:存储区的内容
该存储区中的内容以二进制编码方式表示,按变量所绑定的类型来进行解释;
变量与它的值的绑定是动态的;
常数(量)的值不能修改 -
(4)变量的类型
与变量相关联的值,以及对这些值进行的操作的抽象。
类型可用来解释变量绑定的存储区的内容(二进制编码)的意义
第三节 程序单元
简称单元,是程序执行过程中被独立调用的单元。如:子程序、分程序、函数、过程等。
单元表示
编译时,单元表示为单元的源程序。
运行时,单元表示由一个代码段和一个活动记录组成,称为单元实例。
活动记录
执行单元需要的信息,及该单元的局部变量的存储区
非局部变量
一个程序单元可以引用未被本单元说明而被其他单元说明的变量
全局变量
在一个程序中,各个程序单元都可以引用的变量
引用环境
一个程序单元可以引用的局部变量、非局部变量和全局变量对应的数据对象(存储区)
局部化环境
局部变量绑定于存储在U的当前活动记录中的数据对象,称为局部环境
非局部环境
非局部变量绑定于其他的程序单元(定义该非局部变量的程序单元)的活动记录中的数据对象;或非局部变量绑定全局数据区中的数据对象称为非局部环境
别名
同一单元的引用环境中有两个或多个变量绑定于统一数据对象,称这些变量互为别名。
副作用
对一个非局部变量进行修改。
(一个程序单元的主要作用是对自己的形参和局部变量进行访问和修改)