乐趣区

编译原理 一 绪论

程序设计语言和编译程序

用助记符 代替机器语言(二进制编码)的另一种语言,汇编语言。
汇编语言编写的程序必须翻译成机器语言才能执行,这种翻译是通过“汇编程序”实现的。
编译程序就是指这样一种程序,通过它能够将用高级语言编写的源程序转换为与之在逻辑上等价的低级语言形式的目标程序。

一个高级语言程序的执行分为两个阶段:

编译阶段。将源程序变换成目标程序。
运行阶段。接收输入数据,运行后输出运算结果。

如果编译生成的目标程序是汇编语言形式的,那么在编译与运行阶段之间还有一个汇编阶段。

高级语言程序也有通过解释程序来执行的。特点是:

逐条读出语句并解释执行。(边解释边执行)
解释程序的执行过程中并不产生目标程序。
典型的例子是 BASIC 语言。

编译过程
分为五个阶段:

词法分析:将源程序中的字符串变换为单词符号流的过程。
语法分析:将单词符号流分解为各类语法单位(语法范畴)。

语义分析和中间代码生成:

对各类语法范畴进行静态语义检查。如变量是否定义,类型是否正确。
检查正确的话进行中间代码的翻译

优化

任务是对中间代码进行等价变换或改造,获得更为高效的目标代码。
优化遵守程序的等价变换原则

目标代码生成
把优化后的中间代码变换为机器语言程序或者汇编语言程序。

注意点:

一个编译过程分多遍完成可以使编译程序的逻辑结构更清晰
编译过程的绝大部分时间都花在表格管理上
为了尽可能多的发现错误,应该在发现错误后还能继续编译下去

开发一个编译程序
常采用下列技术实现:

自编译
用某种高级语言编写自己的编译程序称为自编译。

交叉编译
指用 a 机器上的编译程序来产生可在 b 机器上运行的目标代码。

自展
移植

退出移动版