概论
字数
834 字
阅读时间
4 分钟
一、程序设计语言及编译程序
编译程序是系统软件 编译程序是翻译程序
(一)编译
- 概念:将一种语言(源语言)编写的程序,翻译 成等价的、用另一种语言目标语言)编写的程序
- 图示:
tips
总而言之,编译的作用就是:
- 翻译成另外一种语言
- 源语言与目标语言等价
- 编译就是将高级语言(源语言)翻译成汇编语言或机器语言(目标语言)的过程
(二)编译器
- 作用及概念:编译程序,将一种语言(源语言)编写的程序,翻译成等价的、用另一种语言(目标语言)编写的程序的计算机软件
- 图示:
(三)历史发展
- 图示:
(四)高级语言及其编译执行
1. 程序设计语言
分类:
低级语言:机器语言,汇编语言。 高级语言:Fortran,Pascal,lisp,C,Java,Python......
2. 解释与编译
翻译程序的几种方式:
- 汇编程序:将汇编语言程序翻译成机器语言代码。
- 编译程序:将高级语言程序翻译成机器语言代码。
- 解释程序:一句一句地翻译。工作效率较低。
区别
解释方式不生成目标代码,编译方式一定生成目标代码。所以每次用解释方式翻译程序时都要重新翻译一次,而用每次编译方式解释程序,会优先找是否有上次编译成功生成的目标代码,若有,则直接调用。
3. 高级语言的编译
- 步骤:
- 阶段一
- 源程序 --> 目标代码或汇编语言代码
- 汇编语言代码 --> 目标代码
- 阶段二
- 进行连接装配,生成可执行程序.EXE文件
- 直接运行.EXE文件
- 阶段一
4. 编译系统
组成
编译程序、连接程序、系统库、源程序编辑程序总称为编译系统。
5. 编译过程
过程步骤
词法分析 --> 语法分析 --> 语义分析和中间代码生成 --> 代码优化 --> 产生目标代码 --> 表格处理及错误处理
- 图示:
具体过程不多赘述,若有用到再进行补充[1]
6. 寄存器分配
原则
尽可能地将较多的变量保存在寄存器中 尽可能地将频繁使用的变量保存在寄存器中
- 分类
- 基于使用计数的寄存器分配
20世纪80年代之前使用,如银河-I编译器
- 基于图着色的寄存器分配
突破性进展,20世纪80年代开始流行,如GCC,LLVM
- 基于线性扫描的寄存器分配
1999年提出,如LLVM
- 基于SSA(Static Single Assignment)的寄存器分配
2005年提出
贡献者
freeway348
文件历史
待补充1:编译过程具体步骤实现 ↩︎