文章目录
引论
一、编译与解释
1.1 编译程序
翻译程序(Translator)
- 把某一种语言程序(源语言程序)等价地转换成另一种语言程序(目标语言程序)的程序
编译程序(Compiler)
-
把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编、机器语言)的程序
-
分类
- 诊断编译程序(Diagnostic Compiler)
- 发现代码中的错误
- 优化编译程序(Optimizing Compiler)
- 提高编译效率
- 交叉编译程序(Cross Compiler)
- 宿主机与目标机不同
- 概念解释
- 宿主机 - 运行编译程序计算机
- 目标机 - 运行目标语言程序计算机
- 可变目标编译程序(Retargetable Compiler)
- 只要改变和目标机器有关的部分,就可以针对不同目标平台生成不同的目标机器上的代码
- 诊断编译程序(Diagnostic Compiler)
1.2 解释程序
解释程序(Interpreter)
- 把源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序
二、计算思维
2.1 概述
「定义」计算思维是运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为,它包括了一系列广泛的计算机科学的思维方法。
「分类」
- 抽象
- 自动化
- 问题分解
- 递归
- 权衡
- 保护、冗余、容错、纠错和恢复
- 利用启发式推理来寻求解答
- 在不确定情况下的规划、学习和调度
- …
2.2 编译中的计算思维
2.2.1 抽象
- 方法
- 忽略一个主题中与当前问题(或目标)无关的那些方面
- 从众多的事物中抽取出共同的、本质性的特征,舍弃其非本质的特征
- 是一种从个体把握一般、从现象把握本质的认知过程和思维方法
- 编译中的体现
- 有限自动机
- 形式文法
- …
2.2.2 自动化
- 方法
- 将抽象思维的结果在计算机上实现,是一个将计算思维成果物化的过程,也是将理论成果应用于技术的实践
- 自动化的思维方法不仅体现在编译程序本身的工作机制上,更体现在了编译程序的生成工具的研究和设计上
- 编译中的体现
- 有限自动机
- 预测分析程序
- 算符优先分析
- LR分析
- …
2.2.3 分解
- 方法
- 将大规模的复杂问题分解成若干个较小规模的、更简单的问题加以解决
- 编译中的体现
- 中间语言的引入
- 编译多阶段
- 多遍分析过程
- …
2.2.4 递归
- 方法
- 问题的解决依赖于类似问题的解决,只不过后者的复杂程序或规模较原来的问题更小
- 编译中的体现
- 递归下降分析
- 基于树遍历的属性计算
- 语法制导翻译
- …
2.2.5 权衡
- 方法
- 理论可实现 vs. 实际可实现
- 编译中的体现
- 尽管上下文无关文法不是万能的,但我们依然用它来处理高级程序设计语言
- 优化措施的选择
三、编译过程
3.1 词法分析
- 「任务」
- 输入源程序,对构成源程序的字符串进行扫描和分解,识别出单词符号
- 「依循的原则」
- 构词规则
- 「描述工具」
- 有限自动机
- 有限自动机
3.2 语法分析
- 「任务」
- 在词法分析的基础上,根据语法规则把单词符号串分解成各类语法单位(语法范畴)
- 「依循原则」
- 语法规则
- 「描述工具」
- 上下文无关文法
- 上下文无关文法
3.3 中间代码生成
- 「任务」
- 对各类语法单位按语言的语义进行初步翻译
- 「依循原则」
- 语义规则
- 「描述工具」
- 属性文法
- 「中间代码」
- 三元式、四元式、树、…
3.4 优化
- 「任务」
- 对前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码
- 「依循原则」
- 程序的等价变换规则
3.5 目标代码产生
- 「任务」
- 把中间代码变换成特定机器上的目标代码
- 「依赖」
- 依赖于硬件系统结构和机器指令的含义
- 「三种形式的目标代码」
- 汇编指令代码:需要进行汇编
- 绝对指令代码:可直接运行
- 可重新定位指令代码:需要链接
三、编译程序结构
3.1 总框图
3.1.1 出错处理
- 出错处理程序
- 发现源程序中的错误,把有关错误信息报告给用户
- 语法错误
- 源程序中不符合语法(或词法)规则的错误
- 非法字符、括号不匹配、缺少;、…
- 语义错误
- 源程序中不符合语义规则的错误
- 说明错误、作用域错误、类型不一致、…
3.1.2 遍(pass)
- “遍”:对源程序或源程序的中间表示从头到尾扫描一次
- 阶段 v.s. 遍
- 一遍可以由若干段组成
- 一个阶段也可以分若干遍来完成
3.2 前端后端
- 编译前端
- 与源语言有关,如词法分析、语法分析、语义分析与中间代码产生,与机器无关的优化
- 编译后端
- 与目标机有关,与目标机有关的优化、目标代码生成
- 分离的好处
- 程序逻辑结构清晰
- 优化更充分,有利于移植
四、编译程序生成
4.1 概述
- 以汇编语言和机器语言为工具
- 优点:针对具体机器,充分发挥计算机功能,程序效率高
- 缺点:程序难读、难写、易出错、难维护、生产的效率低
- 高级语言
- 程序易读、易理解、容易维护、生产效率高
4.2 编译程序生成与移植
-
「生成」利用已有的某种语言的编译程序实现另一种语言的编译程序
-
「移植」把一种机器上的编译程序移植到另一种机器上
-
「自编译方式」不断扩大涵盖语言的范围
-
「自动生成」