常用的高级程序设计语言
常用的高级程序设计语言
语言 特点
FORTRAN 数值计算
COBOL 事务处理
PASCAL 结构化程序设计
LISP 函数式程序设计
PROLOG 逻辑程序设计
C 系统程序设计
Smalltalk 面向对象程序设计
Java Internet应用,可移植性
Python 解释型
高级程序设计语言的优点
相对机器语言或汇编语言,高级程序设计语言
- 更接近于数学语言和工程语言,更直观、自然和易于理解
- 更容易验证其正确性、改错
- 编写程序的效率更高
- 更容易移植
程序设计语言的定义
标识符是语法概念,名字是语义概念
语法
- 程序本质上是一定字符集上的字符串
- 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序
- 词法规则:单词符号的形成规则
- 单词符号是语言中具有独立意义的最基本结构
- 一般包括:常数、标识符、基本字、算符、界符等
- 描述工具:有限自动机
- 语法规则:语法单位的形成规则
- 语法单位通常包括:表达式、语句、分程序、过程、
- 函数、程序等;
- 描述工具:上下文无关文法
E→i
E→E+E
E→E*E(不能理解成乘号)
E→(E)
语法规则和词法规则定义了程序的形式结构
定义语法单位的意义属于语义问题
语义
- 语义
一组规则,用它可以定义一个程序的意义 - 描述方法
- 自然语言描述
二义性、隐藏错误和不完整性 - 形式描述
操作语义
指称语义
代数语义
- 自然语言描述
语用
程序语言的基本功能和层次结构
- 程序,本质上说是描述一定数据的处理过程
- 程序语言的基本功能
描述数据和对数据的运算层次结构
程序
| |
子程序或分程序、过程、函数
| |
语句
| |
表达式
| |
数据引用 运算符 函数调用
程序语言成分的逻辑和实现意义
- 抽象的逻辑的意义
- 数学意义
- 计算机实现的意义
- 具体实现
高级程序设计语言的一般特性
高级语言的分类
- 强制式语言(Imperative Languge)/过程式语言
- 命令驱动,面向语句
- FORTRAN、C、Pascal,Ada
- 应用式语言(Applicative Language)
- 注重程序所表示的功能,而不是一个语句接一个语句地执行
- LISP、ML
- 基于规则的语言( Rule-based Language)
- 检查一定的条件,当它满足值,则执行适当的动作
- Prolog
- 面向对象语言(Object-Oriented Language)
- 封装、继承和多态性
- Smalltalk,C++,Java
程序结构
FORTRAN
- 一个程序由一个主程序段和若干辅程序段组成
- 辅程序段可以是子程序、函数段或数据块
- 每个程序段由一系列的说明语句和执行语句组成,各段可以独立编译
- 模块结构,没有嵌套和递归
- 各程序段中的名字相互独立,同一个标识符在不同的程序段中代表不同的名字
PROGRAM …//主程序
…
end
SUBROUTINE …//辅程序1
…
end
FUNCTION …//辅程序2
…
end
PASCAL
- PASCAL程序本身可以看成是一个操作系统调用的过程,过程可以嵌套和递归
- 一个PASCAL过程
过程头;
说明段(由一系列的说明语句组成);
begin
执行体(由一系列的执行语句组成);
end
作用域
- 同一个标识符在不同过程中代表不同的名字
- 作用域:一个名字能被使用的区域范围
- 名字作用域规则——"最近嵌套原则"
最近嵌套原则
- 一个在子程序B1中说明的名字X只在B1中有效(局部于B1)
- 如果B2是B1的一个内层子程序且B2中对标识符X没有新的说明,则原来的名字X在B2中仍然有效
- 如果B2对X重新作了说明,那么,B2对X的任何引用都是指重新说明过的这个X
program main
var A, B:real;
…
procedure P1
var B:boolean;
…
begin
…
end
procedure P2
var A:integer;
…
begin
…
end
begin
…
end
P2的代码能够调用P1
JAVA
- 面向对象的高级语言
- 类(Class)
- 继承(Inheritance)
- 多态性(Polymorphism)和动态绑定(Dynamic binding)
class Car{
int color;
int door;
int speed;
…
public push_break ( ) {
…
}
public add_oil ( ) {
…
}
}
class Trash_Car extends car {
double amount;
public fill_trash ( ) {
…
}
}
数据结构与操作
数据类型通常包括三要素
- 用于区别这种类型数据对象的属性
- 这种类型的数据对象可以具有的值
- 可以作用于这种类型的数据对象的操作
初等数据类型
- 数值类型
- 整型、实型、复数、双精度
- 运算:+,-,*,/等
- 逻辑类型
- true、false
- 布尔运算:∨,∧,┑等
- 字符类型:符号处理
- 指针类型
标识符与名字
- 标识符
- 以字母开头的,由字母数字组成的字符串
- 名字
- 标识程序中的对象
- 名字的意义和属性
- 值:单元中的内容
- 属性:类型和作用域
- 名字的说明方式
- 由说明语句来明确规定的
- int score
- 隐含说明
- FORTRAN 以I,J,K,…N为首的名字代表整型,否则为实型
- 动态确定
- 走到哪里,是什么,算什么
- 由说明语句来明确规定的
名字的绑定可以发生在编译过程中也可以发生在运行过程中
- 标识符
- 以字母开头的,由字母数字组成的字符串
- 标识符与名字两者有本质区别
- 标识符是语法概念
- 名字有确切的意义和属性
数据结构
数组
- 逻辑上,数组是由同一类型数据组成的某种n维矩形结构,沿着每一维的距离,称为下标
- 数组可变与不可变
- 编译时能否确定其存贮空间的大小
- 访问
- 给出数组名和下标值,如A[10, i+ j]
- 存放方式
- 按行存放,按列存放
- 数组A[10,20]的A[1,1]的地址为a,每个元素占1字节,各维下标从1开始,按行存放,那么
A[i,j]地址为:
a+(i-1)*20+(j-1) - 通用的数组元素地址计算公式
数组元素地址计算
- 设A为n维数组,按行存放,每个元素宽度为w
- low i 为第i维 的下界
- up i 为第i维 的上界
- n i 为第i维 可取值的个数(n i = up i -low i + 1),
- base为A的第一个元素相对地址
- 元素A[i 1 ,i 2 ,…,i k ]相对地址公式
( ((…i 1 n 2 +i 2 )n 3 +i 3 )…)n k +i k )×w +
base-((…((low 1 n 2 +low 2 )n 3 +low 3 )…)n k +low k )×w)/Con
内情向量
- 内情向量
- 登记维数,各维的上、下限,首地址,以及数组(元素)的类型等信息
记录
- 由已知类型的数据组合在一起的一种结构
- 记录或者结构的元素,也叫做域(field)
record { char name[20];
integer age;
bool married;
}
- 访问:复合名 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)提供了数据封装的支持
package STACKS is
type ELEM is private;
type STACK is limited private;
procedure push (S: in out STACK; E: in ELEM);
procedure pop (S: in out STACK; E: out ELEM);
…
end STACK;
//规范说明
//程序包体
package body STACKS is
procedure push(S: in out STACK; E: in ELEM);
begin
……实现细节
end push;
procedure pop (S: in out STACK; E: out ELEM);
begin
……实现细节
end pop;
end;
- 一个抽象数据类型包括
- 数据对象集合
- 作用于这些数据对象的抽象运算的集合
- 这种类型对象的封装,即,除了使用类型中所定义
的运算外,用户不能对这些对象进行操作
- 程序设计语言对抽象数据类型的支持
- Ada通过程序包(package)提供了数据封装的支持
- Smalltalk、C++和Java通过类(Class)对抽象数据类型提供支持
JAVA 程序示例
class Car{
int color_number;
int door_number;
int speed;
…
public push_break ( ) {
…
}
public add_oil ( ) {
…
}
}
class Trash_Car extends car {
double amount;
public fill_trash ( ) {
…
}
}
编译原理
语句与控制结构
表达式
- 表达式由运算量(也称操作数,即数据引用或函数调用)和算符(运算符,操作符)组成
- 形式:中缀、前缀、后缀X*Y -A P↑或者p->
- 表达式形成规则
- 变量(包括下标变量)、常数是表达式。
- 若E 1 、E 2 为表达式,θ是一个二元算符,则E 1 θE 2 是表达式。
- 若E是表达式,θ为一元算符,则θE(或Eθ)是表达式。
- 若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 S 1 else S 2
* 循环语句
while B do S
repeat S until B
for i:=E 1 step E 2 until E 3 do S
* 过程调用语句
call P(X 1 , X 2 , ... ,X n )
* 返回语句
return (E)
功能
- 执行语句:描述程序的动作
- 说明语句:定义各种不同数据类型的变量或运算,定义名字的性质
语句的分类
- 形式
- 简单句:不包含其他语句成分的基本句
A = B + C ;
goto 105 ;
- 复合句:句中有句的语句
while (i >= 0) {
j = i * 10;
i++;
}
原文地址:https://www.cnblogs.com/ygjzs/p/11863514.html
时间: 2024-11-05 13:46:42