2. 程序序言设计
本文参考b站UP主zst,原视频:动态的语义错误_哔哩哔哩_bilibili
本文旨在从题目出发,只保留真题考到的相关的概念,都是浓缩过的知识点,所以简练而精髓,每一个知识点后都附带真题解析,各位小伙伴可以自行点开观看,方便复习。
2.1. 编译器和解释器
2.1.1. 编程语言
低级语言:
- 机器语言:由01组成的机器序列
- 汇编语言:用符号表示指令
高级语言:与人类使用的自然语言相似,将自然语言翻译成机器语言
2.1.2. 编译器
编译程序:翻译源程序时,将源程序翻译成独立保存的目标程序,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不会参与目标程序的运行过程
2.1.3. 解释器
解释程序:翻译源程序时,不生成独立的目标程序,解释程序和源程序都要参与到程序的运行过程中。
2.1.4. 真题合集
2.2. 程序设计语言的基本成分
2.2.1. 控制结构
2.2.2. 数据类型
- 便于为数据合理分配存储单元
- 便于对参与表达式计算的数据对象进行检查
- 便于规定数据对象的取值范围以及能够进行的运算
2.2.3. 真题合集
2.3. 函数
函数的定义:函数首部和函数体。描述了函数做什么和怎么做。
2.3.1. 传值调用
传值调用:将实参的值传递给形参,实参可以是变量、常量和表达式,不可以实现形参和实参双向传递信息的效果。
2.3.2. 引用调用
引用调用:将实参的地址传递给形参,形参必须有地址,不能是常量或表单时,可以实现形参和实参双向传递信息的效果。
2.3.3. 代码验证
2.3.4. 真题合集
2.4. 编译、解释程的序翻译阶段
2.4.1. 工作阶段示意图
2.4.2. 编译方式
编译方式:词法分析-语法分析-语义分析-中间代码生成-代码优化-目标代码生成
编译器可以省略:中间代码生成-代码优化,即在完成前三个阶段之后直接生成目标代码
编译器和解释器都不可省略:词法分析-语法分析-语义分析,且顺序不可交换
2.4.3. 解释方式
解释方式:词法分析-语法分析-语义分析
编译器和解释器都不可省略:词法分析-语法分析-语义分析,且顺序不可交换
2.4.4. 真题合集
2.5. 符号表
2.5.1. 符号表
不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中,记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。
2.5.2. 真题合集
2.6. 编译器的工作阶段
2.6.1. 词法分析
- 大多以干扰选项出现
- 输入:源程序
- 输出:记号流
- 作用:分析构成程序的字符以及由字符按照构造规则构成的符号是否符合程序语言的规定
2.6.2. 语法分析
- 输入:记号流
- 输出:语法树(分析树)
- 作用:对各条语句的结构进行合法性分析,分析程序中的句子结构是否正
- 确
- 常见的语法错误:括号不匹配、缺失冒号
- 可以发现所有语法错误
2.6.3. 语义分析
- 输入:语法树(分析树)
- 作用:可以发现静态语义错误
- 不能发现所有语义错误
- 不能发现动态语义错误,动态语义错误运行时才能发现
2.6.4. 目标代码生成
- 与具体机器密切相关,寄存器的分配处于目标代码生成阶段
2.6.5. 真题合集
2.6.6. 动态语义错误
- 不能发现所有语义错误
- 不能发现动态语义错误,动态语义错误运行时才能发现
-
2.6.7. 真题合集
2.6.8. 中间代码生成
- 常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式
- 中间代码与具体的机器无关
- 可以将不同的高级程序语言翻译成同一种中间代码,可以跨平台。
- 因为与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理和提高编译程序的可移植性。
2.6.9. 真题合集
2.6.10. 正规式
正规式是词法分析中的一个工具,正规集由正规式推理得来
|代表左边右边二选一,或
*代表左边第一个数的0个或个多
2.6.11. 真题合集
2.6.12. 有限自动机
- 有限自动机是词法分析的一个工具,它能正确的识别正规集。
- 确定的有限自动机(DFA):对每一个状态来说,识别字符后转移的状态是唯一的,例如识别1的时候只有一种路径可以识别1
- 不确定的有限自动机(NFA):对每一个状态来说,识别字符后转移的状态是不唯一的,例如识别1的时候有多种路径可以识别1
-
- 可以存在多个终态,一个状态既可以是初态也可以是终态
2.6.13. 真题合集
2.7. 上下文无关文法
2.7.1. 上下文无关文法
上下文无关文法被广泛地用于表示各种程序设计语言的语法规则。
2.7.2. 真题合集
2.8. 中缀、后缀表达式转换
2.8.1. 中缀表达式
2.8.2. 后缀表达式
2.8.3. 优先级
优先级从高到低,优先级相同从右向左算
- ()
- * /
- + -
相当于两个数的消消乐,算完两个数就合并,用整体继续算
2.8.4. 语法树中序遍历
中序遍历顺序:左根右
例子:
2.8.5. 语法树后序遍历
后序遍历顺序:左右根
2.8.6. 真题合集