高级程序设计语言概述
一、常用的高级程序设计语言
高级程序设计语言的优点
相对机器语言或汇编语言,高级程序设计语言更接近于数学语言和工程语言,更直观、自然和易于理解
更容易验证其正确性、改错
编写程序的效率更高
更容易移植
二、程序设计语言的定义
语法
程序本质上是一定字符集上的字符串
语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序
词法规则∶单词符号的形成规则
◆单词符号是语言中具有独立意义的最基本结构
◆一般包括︰常数、标识符、基本字、算符、界符等
◆描述工具∶有限自动机
语法规则︰语法单位的形成规则
◆语法单位通常包括:表达式、语句、分程序、过程、函数、程序等
◆描述工具∶上下文无关文法
(第四条说明一个算术表达式外面加上括号构成的还是一个算术表达式)
语法规则和词法规则定义了程序的形式结构
定义语法单位的意义属于语义问题
语义
一组规则,用它可以定义一个程序的意义
描述方法
自然语言描述
◆二义性、隐藏错误和不完整性
形式描述
◆操作语义
◆指称语义
◆代数语义
程序语言的基本功能和层次结构
程序,本质上说是描述一定数据的处理过程
程序语言的基本功能
描述数据和对数据的运算
程序语言成分的逻辑和实现意义
抽象的逻辑的意义
数学意义
计算机实现的意义
具体实现
(计算思维和数学思维不同,许多计算机上成立的规律,在计算机上未必成立,计算思维求解问题时,要考虑一定的物理现实,这在数学家看来,可能并不关心)
三、高级程序设计语言的一般特性
1.高级语言的分类
强制式语言(Imperative Language)/过程式语言
应用式语言(Applicative Language)
◆注重程序所表示的功能,而不是一个语句接一个语句地执行
◆LISP、ML
基于规则的语言(Rule-based Language)
◆检查一定的条件,当它满足值,则执行适当的动作
◆Prolog
面向对象语言(Object-Oriented Language)
◆封装、继承和多态性
2.程序结构
FORTRAN
◆—个程序由一个主程序段和若干辅程序段组成
◆辅程序段可以是子程序、函数段或数据块
◆每个程序段由一系列的说明语句和执行语句组成,各段可以独立编译
◆模块结构,没有嵌套和递归
◆各程序段中的名字相互独立,同一个标识符在不同的程序段中代表不同的名字
PASCAL
PASCAL程序本身可以看成是一个操作系统调用的过程,过程可以嵌套和递归
一个PASCAL过程
同一个标识符在不同过程中代表不同的名字
作用域:一个名字能被使用的区域范围
名字作用域规则——"最近嵌套原则"
◆一个在子程序B1中说明的名字X只在B1中有效(局部于B1)
◆如果B2是B1的一个内层子程序且B2中对标识符X没有新的说明,则原来的名字X在B2中仍然有效
◆如果B2对X重新作了说明那么,B2对X的任何引用都是指重新说明过的这个X
JAVA
面向对象的高级语言类( Class )
继承(Inheritance)
3.数据结构与操作
数据类型通常包括三要素
用于区别这种类型数据对象的属性
这种类型的数据对象可以具有的值
可以作用于这种类型的数据对象的操作
初等数据类型
数值类型
整型、实型、复数、双精度
运算:+,-,*,/等
逻辑类型
true、false
布尔运算:∨,∧,┐等
字符类型:符号处理
指针类型
标识符与名字
标识符
以字母开头的,由字母数字组成的字符串
名字
标识程序中的对象
名字的意义和属性
值:单元中的内容
属性:类型和作用域
名字的说明方式
由说明语句来明确规定的
int score
隐含说明
FORTRAN 以I,J,K,...N为首的名字代表整型,否则为实型
动态确定
走到哪里,是什么,算什么
标识符:以字母开头的,由字母数字组成的字符串
标识符与名字两者有本质区别
◆标识符是语法概念
◆名字有确切的意义和属性
数据结构
数组
逻辑上,数组是由同一类型数据组成的某种n维矩形结构,沿着每一维的距离,称为下标
数组可变与不可变:编译时能否确定其存贮空间的大小
访问:给出数组名和下标值,如A[10,i+ j]
存放方式:按行存放,按列存放
数组元素地址计算
设A为n维数组,按行存放,每个元素宽度为w
lowi为第i维的下界
upi为第i维的上界
ni为第i维可取值的个数(ni = upi -lowi+ 1),
base为A的第一个元素相对地址
内情向量
登记维数,各维的上、下限,首地址,以及数组(元素)的类型等信息
记录
由已知类型的数据组合在一起的一种结构
记录或者结构的元素,也叫做域(field)
访问:复合名cards[k].name
存储:连续存放
域的地址计算:相对于记录结构起点的相对数OFFSET
字符串、表格、栈
字符串:符号处理、公式处理
表格:本质上是一种记录结构
线性表:一组顺序化的记录结构
栈:一种线性表;后进先出,POP, PUSH
抽象数据类型
抽象数据类型(Abstract Data Type)A set of data values and associated operations that are precisely specified independent of any particular implementation.
抽象数据类型由数据集合、及其相关的操作组成,这些操作有明确的定义,而且定义不依赖于具体的实现。
一个抽象数据类型包括
◆数据对象集合
◆作用于这些数据对象的抽象运算的集合
◆这种类型对象的封装,即,除了使用类型中所定义的运算外,用户不能对这些对象进行操作
程序设计语言对抽象数据类型的支持
◆Ada通过程序包(package)提供了数据封装的支持
◆Smalltalk、C++和Java通过类(Class)对抽象数据类型提供支持
4.语句与控制结构
表达式
表达式由运算量(也称操作数,即数据引用或函数调用)和算符(运算符,操作符)组成
形式︰中缀、前缀、后缀
表达式形成规则:
变量(包括下标变量)、常数是表达式。
若E1、E2为表达式,0是一个二元算符,则E1θE2,是表达式。
若E是表达式,0为一元算符,则0E(或E0)是表达式。
若E是表达式,则(E)是表达式。
算符的优先次序
一般的规定
PASCAL:左结合A+B+C=(A+B)+C
FORTRAN:对于满足左、右结合的算符可任取一种,如A+B+C就可以处理成(A+B)+C,也可以处理成A+(B+C)
代数性质
代数性质能引用到什么程度视具体的语言而定
在数学上成立的代数性质在计算机上未必完全成立
A+B = B+A
语句
赋值语句
◆A:= B
◆名字的左值︰该名字代表的存储单元的地址
◆名字的右值︰该名字代表的存贮单元的内容
控制语句
◆无条件转移语句 goto L
◆条件语句 if B then s if B then Si else S2
◆循环语句 while B do S repeat S until B for i:=E1 step E2 until E3, do S
◆过程调用语句 call P(X1,X2,... ,Xn)
◆返回语句 return (E)
语句的分类
功能
执行语句∶描述程序的动作
说明语句∶定义各种不同数据类型的变量或运算,定义名字的性质
形式
简单句∶不包含其他语句成分的基本句
复合句:句中有句的语句