编译原理(一):介绍
第一章 介绍
1.1 什么是编译程序
从基本功能来看,编译程序是一种翻译程序。
假设A为源语言,B为目标语言,编译程序就是将语言A的程序翻译成语言B的程序
-
编译程序是较为复杂的翻译程序
- 需要对源程序进行分析,识别源程序的语法结构信息,理解源程序的语义信息,反馈相应的出错信息
-
编译程序通常是从较高级语言的程序翻译至较低级的语言的程序
C 代码 --> 汇编代码
-
源语言通常为高级语言,目标语言通常为机器级语言或较低的虚拟机语言
-
编译语言的主要泛型
- 命令式语言:C,C++,java
- 面向对象语言:java,C++
- 陈述式语言:函数式,逻辑型
- 并发语言:java,Pascal
- 其他:同步语言,脚本语言
-
编译程序逻辑结构上至少包含两大阶段
-
- 分析阶段:理解源程序,挖掘源程序的语义
- 综合阶段:生成与源程序语义上等价的目标程序
-
-
编译程序的前端、中端、后端
-
- 前端:实现主要的分析任务,通常以第一次生成中间代码为标志
- 后端:实现主要的综合任务,通常以从最后一级中间代码生成目标代码为标志
- 中端:实现各级中间代码上的操作
-
-
典型编译程序的逻辑过程
- 出错处理
- 检查错误:报告出错信息
- 排错:恢复编译工作
- 编译程序的遍
- 对一种代码形式从头到尾扫描一遍,将一个代码空间变换到另一个代码空间
- 代码空间=代码+符号表+其他有用信息
解释程序
不产生目标程序文件,不区别翻译阶段和执行阶段,翻译源程序的每条语句后直接执行,程序执行期间一直有解释程序守候,常用于实现虚拟机
- 比较编译程序和解释程序
-
预处理程序
- 支持宏定义(#define),支持文件包含(#include),支持其他更复杂的源程序扩展信息
- 预处理程序和编译程序的关系
-
汇编程序:翻译汇编语言程序至可重定位的机器语言程序
-
装入和连接程序:对可重定位机器语言程序进行修改,将相对地址变换为机器绝对地址
- 连接程序合并多个可重定位机器语言程序文件到同一个程序
- 装入和连接程序产生最终可执行的机器语言程序
- 调试程序:
- 反馈目标程序运行时信息,将目标程序运行时信息与源程序关联,断点管理、单步跟踪、读/写目标状态等功能
- 调试程序和编译程序的关系