Skip to content

概论

字数
834 字
阅读时间
4 分钟

一、程序设计语言及编译程序

编译程序是系统软件 编译程序是翻译程序

(一)编译

  • 概念:将一种语言(源语言)编写的程序,翻译 成等价的、用另一种语言目标语言)编写的程序
  • 图示:

tips

总而言之,编译的作用就是:

  1. 翻译成另外一种语言
  1. 源语言与目标语言等价
  • 编译就是将高级语言(源语言)翻译成汇编语言或机器语言(目标语言)的过程

(二)编译器

  • 作用及概念:编译程序,将一种语言(源语言)编写的程序,翻译成等价的、用另一种语言(目标语言)编写的程序的计算机软件
  • 图示:

(三)历史发展

  • 图示:

(四)高级语言及其编译执行

1. 程序设计语言

分类:

低级语言:机器语言,汇编语言。 高级语言:Fortran,Pascal,lisp,C,Java,Python......

2. 解释与编译

翻译程序的几种方式:

  1. 汇编程序:将汇编语言程序翻译成机器语言代码。
  2. 编译程序:将高级语言程序翻译成机器语言代码。
  3. 解释程序:一句一句地翻译。工作效率较低。

区别

解释方式不生成目标代码,编译方式一定生成目标代码。所以每次用解释方式翻译程序时都要重新翻译一次,而用每次编译方式解释程序,会优先找是否有上次编译成功生成的目标代码,若有,则直接调用。

3. 高级语言的编译

  • 步骤:
    • 阶段一
      1. 源程序 --> 目标代码或汇编语言代码
      2. 汇编语言代码 --> 目标代码
    • 阶段二
      1. 进行连接装配,生成可执行程序.EXE文件
      2. 直接运行.EXE文件

4. 编译系统

组成

编译程序、连接程序、系统库、源程序编辑程序总称为编译系统。

5. 编译过程

过程步骤

词法分析 --> 语法分析 --> 语义分析和中间代码生成 --> 代码优化 --> 产生目标代码 --> 表格处理及错误处理

  • 图示:

具体过程不多赘述,若有用到再进行补充[1]

6. 寄存器分配

原则

尽可能地将较多的变量保存在寄存器中 尽可能地将频繁使用的变量保存在寄存器中

  • 分类
  1. 基于使用计数的寄存器分配

20世纪80年代之前使用,如银河-I编译器

  1. 基于图着色的寄存器分配

突破性进展,20世纪80年代开始流行,如GCC,LLVM

  1. 基于线性扫描的寄存器分配

1999年提出,如LLVM

  1. 基于SSA(Static Single Assignment)的寄存器分配

2005年提出

贡献者

The avatar of contributor named as freeway348 freeway348

文件历史


  1. 待补充1:编译过程具体步骤实现 ↩︎

撰写