编译程序

一个翻译程序:能够将源语言程序转换成目标语言程序,且前后者在逻辑上等价。

编译过程

  1. 词法分析

    输出二元组 <类码,内码>

  2. 语法分析

    根据语法规则,将单词符号串分解成各类语法单位。

  3. 语义分析与中间代码产生

    静态语义检查以及中间代码的翻译。

  4. 优化

    公共子表达式的提取、循环优化、删除无用代码……

  5. 目标代码生成

    绝对指令代码或可重定位指令代码或汇编指令代码。

编译程序的结构

Compile Program Strcture

符号表

用来登记源程序中出现的每个名字以及名字的各种属性。

出错处理

出错处理程序完成。

对源程序或源程序的中间结果从头到尾扫描一次,并做有关的加工处理,生成新的中间结果或目标程序。

多遍比一遍占用内存少。

编译前端和后端

  • 编译前端

    与源语言有关而与目标机无关的部分组成:词法分析、语法分析、语义分析与中间代码产生,以及部分的代码优化。

  • 编译后端

    与目标机有关的部分:与目标机有关的代码优化和目标代码生成。

编译程序的生成

T 形图

  • S:源语言 (Source)
  • T:目标语言 (Target)
  • I:编译程序实现语言 (Implement)

自展

通过源语言的子集语言来实现源语言到目标语言的编译。

已知一种语言的编译器,构造另一种语言的编译器

通过已知源语言的编译器来实现目标语言的编译。

移植

通过编写已知高级语言在已知机器上能够运行的目标语言的编译器;生成由已知源语言编写的,从高级语言到目标语言的编译器;再结合编写的编译器即能实现由目标语言编写的,从已知高级语言目标语言的编译器。

    分享到:
分类: 课程笔记

发表评论

电子邮件地址不会被公开。 必填项已用*标注

验证码 *