2.1 程序设计语言概述

2.1.1 程序设计语言的基本概念

1 低级语言和高级语言

【机器指令】是最基本的计算机语言。P56

用【符号】表示的指令称为【汇编指令】。P56

【汇编指令】的【集合】被称为【汇编语言】。P56

【机器语言】和【汇编语言】为【低级语言】。P56

2 编译程序和解释程序

语言之间的翻译形式有多种,基本方式为【汇编】、【解释】和【编译】。P56

在【编译】方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程。P56

在【解释】方式下,解释程序和源程序(或其某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。P56

3 程序设计语言的定义

程序设计语言的定义都涉及【语法】、【语义】和【语用】等方面。P56

【语法】是指由程序设计语言的基本符号组成程序中的各个语法成分(包括程序)的一组【规则】。P56

由基本字符构成的符号(单词)书写规则称为【词法规则】。P56

由符号构成语法成分的规则称为【语法规则】。P56

程序设计语言的语法可用【形式语言】进行描述。P56

【语义】是程序设计语言中按语法规则构成的各个语法成分的含义。P56

语义可分为【静态语义】和【动态语义】。P56

【静态语义】指编译时可以确定的语法成分的含义。P56

运行时刻才能确定的含义是【动态语义】。P56

【语用】表示了构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。P56

【语境】是指理解和实现程序设计语言的环境,包括【编译环境】和【运行环境】。P56

4 程序设计语言的分类

程序设计语言有交流【算法】和【计算机实现】的双重目的。P56

若一种程序设计语言不依赖于机器硬件,则称为【高级语言】。P56

若程序设计语言能够应用于范围广泛的问题求解过程中,则称为【通用】的程序设计语言。P56

1) 程序设计语言发展概述
2) 程序设计语言分类

设计程序的方法将程序语言大致分为【命令式】和【结构化】程序设计语言、【面向对象】的程序设计语言、【函数式】程序设计语言和【逻辑型】程序设计语言等范型。P59

2.1.2 程序设计语言的基本成分

程序设计语言的基本成分包括【数据】、【运算】、【控制】和【传输】等。P61

1 程序设计语言的数据成分

c++数据类型:【基本】类型(int,char等)、【特殊】类型(void)、【用户定义】类型(枚举类型)、【构造】类型(数组、结构、联合)、【指针】类型、【抽象数据】类型(类类型)。P62

2 程序设计语言的运算成分

大多数高级程序设计语言的基本运算可以分成【算术】运算、【关系】运算和【逻辑】运算。P62

3 程序设计语言的控制成分

可计算问题的程序都可以用【顺序】、【选择】和【循环】这3种控制结构来描述。P62

4 程序设计语言的传输成分

5 函数

2.2 语言处理程序基础

【语言处理程序】主要分为【汇编】程序、【编译】程序和【解释】程序3种基本类型。P67

2.2.1 汇编程序基本原理

1 汇编语言

汇编语言源程序由若干条语句组成,其中可以有三类语句:【指令】语句、【伪指令】语句和【宏指令】语句。P67

【指令】语句可分为【传送】指令、【算术运算】指令、【逻辑运算】指令、【移位】指令、【转移】指令和【处理机控制】指令等类型。P67

【指令】语句:汇编后能产生相应的机器代码,这些代码能被CPU直接识别并执行相应的操作。P67

【伪指令】语句指示汇编程序在汇编源程序时完成某些工作,例如为变量分配存储单元地址,给某个符号赋一个值等。P67

2 汇编程序

汇编程序一般需要【两】次扫描源程序才能完成翻译过程。P68

2.2.2 编译程序基本原理

1.编译过程概述

软件设计师教程(第5版)第2章 程序设计语言基础知识(更新中)_软件设计师


编译的工作阶段:①【词法】分析:识别出一个一个的单词。②【语法】分析:构造出语法树。③【语义】分析:分析各语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。④中间代码生成:是根据语义分析的输出生成中间代码。⑤代码优化。⑥目标代码生成:是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码。P69

词法分析和语法分析在本质上都是对源程序的【结构】进行分析。P70

【符号表】的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。P72

用户编写的源程序不可避免地会有一些错误,这些错误大致可分为【静态】错误和【动态】错误。P72

【静态】错误是指编译阶段发现的程序错误,可分为【语法】错误和【静态语义】错误。P72

单词拼写错误、标点符号错误、表达式中缺少操作数、括号不匹配等有关语言结构上的错误称为【语法】错误。P72

语义分析时发现的运算符与运算对象类型不合法等错误属于【静态语义】错误。P73

2.文法和语言的形式描述

1) 字母表、字符串、字符串集合及运算
2)文法和语言的形式描述

3.词法分析

【词法】分析的任务是把构成源程序的字符串转换成单词符号序列。P75

1) 正规表达式和正规集
2)有限自动机
3)NFA到DFA的转换
4)DFA的最小化

4.正规式与有限自动机之间的转换

1) 有限自动机转换为正规式
2) 正规式转换为有限自动机

5.词法分析器的构造

有了【正规式】和【有限自动机】的理论基础后,就可以构造出编译程序的词法分析模块。P81

6.语法分析

【语法】分析的任务是根据语言的语法规则分析单词串是否构成短语和句子,即表达式、语句和程序等基本语言结构,同时检查和处理程序中的语法错误。P81

语法分析方法有多种,根据产生语法树的方向,可分为【自底向上】和【自顶向下】两类。P81

1) 上下文无关文法
2) 自顶向下语法分析方法
3) 自底向上语法分析方法

一个LR分析器由【驱动器】、【分析表】、【分析栈】3个部分组成。P87

【分析表】可分为【动作表】(ACTION)和【状态转换表】(GOTO)两个部分。P87

【分析栈】包括【文法符号栈】和相应的【状态栈】。P87

在LR分析过程中,改变格局的动作有4种:【移进】(Shift)、【归约】(Reduce)、【接受】(Accept)、【报错】(Error)。P88

7.语法制导翻译和中间代码生成

描述程序语义的形式化方法主要有【属性文法】、【公理语义】、【操作语义】和【指称语义】等。P88

1)中间代码
2)常见语法结构的翻译
3)动态存储分配和过程调用的翻译

8.中间代码优化和目标代码生成

【优化】就是对程序进行等价变换,使得从变换后的程序能生成更有效的目标代码。P95

2.2.3 解释程序基本原理

1.解释程序的基本结构

解释程序通常可以分成两部分:第一部分是【分析】部分,第
二部分是【解释】部分。P97

2.高级语言编译与解释方式的比较

对于高级语言的编译和解释工作方式,可以从以下几个方面进行比较:效率、灵活性、可移植性性。P98