跟学视频:学以致知Learning - 软件设计师 基础阶段|考点理论精讲
Chapter 7 - 程序设计语言基础知识
1 - 基本概念
低级语言和高级语言
- 低级语言:通常称机器语言和汇编语言为低级语言,机器语言是指用0、1字符串组成的机器指令序列,是最基本的计算机语言,汇编语言是指用符号表示指令的语言
- 高级语言:是从人类的逻辑思维角度出发、面向各类应用的程序语言,其抽象程度大大提高,需要编译成特定机器上的目标代码才能执行。这类语言与人们使用的自然语言比较接近,大大提高了程序设计的效率
程序设计语言的定义一般都涉及语法、语义、语用和语境等方面
- 语法:由程序设计语言的基本符号组成程序中的各个语法成分的一组规则,其中由基本字符构成的符号书写规则称为词法规则,由符号构成语法成分的规则称为语法规则。程序语言的语法可通过形式语言进行描述
- 语义:程序语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义
- 语用:表示构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响
- 语境:理解和实现程序设计语言的环境,包括编译环境和运行环境
程序设计语言的分类
-
命令式程序设计语言
命令式程序设计语言是基于动作的语言,在这种语言中,计算被看作是动作的序列,命令式语言族开始于Fortran、Pascal和C语言,体现了命令式程序设计的关键思想
-
面向对象的程序设计语言
面向对象的程序设计在很大程度上应归功于从模拟领域发展而来的Simula,Simula提出了对象和类的概念。C++、Java和Smalltalk是面向对象程序设计语言的代表
-
函数式程序设计语言
函数式程序设计语言是一类以λ-演算为基础的语言。该语言的代表是LISP,其中大量使用了递归
-
逻辑型程序设计语言
逻辑型程序设计语言是一类以形式逻辑为基础的语言。该语言的代表是建立在关系理论和一阶谓词理论基础上的Prolog
程序设计语言的基本成分
1、数据成分
-
常量和变量
-
全局量和局部量
-
数据类型
基本类型:整型(int)、字符型(char)、实型(float、double)、布尔类型(bool)
特殊类型:空类型(void)
用户定义类型:枚举类型(enum)
构造类型:数组、结构和联合
指针类型:type
抽象数据类型:类类型
2、运算成分
- 算术运算:加减乘除
- 逻辑运算:与或非
- 关系运算
3、控制成分
- 顺序结构
- 选择结构
- 循环结构
4、函数和函数的调用
2 - 编译与解释
汇编语言是为特定的计算机或计算机系统设计的面向机器的符号化的程序设计语言。用汇编语言编写的程序称为汇编语言源程序。汇编语言源程序由若干条语句组成。一个程序中可以有3类语句:指令语句、伪指令语句和宏指令语句
编译程序的功能是把用高级语言书写的源程序翻译成与之等价的目标程序。编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个阶段,实际的编译器可能会将其中的某些阶段结合在一起进行处理
解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序并不产生目标程序,这是它和编译程序的主要区别
-
词法分析阶段的任务是:对源程序从前到后(从左到右)逐个字符进行扫描,从中识别出一个个“单词”符号。“单词”符号是程序设计语言的基本语法单位,如关键字、标识符等
-
语法分析阶段的任务是:在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。词法分析和语法分析本质上都是对源程序的结构进行分析
-
语义分析阶段主要是:审查源程序是否存在语义错误,并收集类型信息供后面的代码生成阶段使用,只有语法和语义都正确的源程序才能翻译成正确的目标代码。语义分析的一个主要工作是进行类型分析和检查
-
中间代码生成阶段的工作:根据语义分析的输出生成中间代码
-
代码优化阶段的任务:对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间
-
目标代码生成阶段的任务:把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码。这是编译的最后阶段,它的工作与具体的机器密切相关
3 - 文法
4 - 语法推导树
5 - 有限自动机
6 - 正规式
有限自动机的另外一种表达形式
7 - 表达式
8 - 传值与引用(传址)
传值调用:形参取的是实参的值,形参的改变不会导致实参的值发生改变
引用(传址)调用:形参取的是实参的地址,即相当于实参存储单元地址的引用,因此其值改变的同时就改变了实参的值
9 - 各种程序语言特点
- Fortran语言(科学计算,执行效率高)
- Pascal语言(为教学而开发的,表达能力强,Delphi)
- C语言(指针操作能力强,高效)
- Lisp语言(函数式程序语言,符号处理,人工智能)
- C++语言(面向对象,高效)
- Java语言(面向对象,中间代码,跨平台)
- C#语言(面向对象,中间代码,Net)
- Prolog语言(逻辑推理,简洁性,表达能力,数据库和专家系统)