Appearance
第五章 编译概述
一、一些概念
- 翻译:将一种语言编写的程序转换为完全等效的另一种语言编写的程序的过程
- 编译:将高级语言程序翻译成低级语言程序
- 汇编:将汇编语言翻译成机器语言
- 解释:不将源程序翻译成目标程序,而是一边分析,一边执行
- 宿主语言:编写编译程序的语言
- 如果一个编译程序能生成可供其宿主机执行的机器码,则称该编译程序为自驻留的
- 如果编译程序是用源语言编写的,则称该编译程序是自编译的
- 如果一个编译程序生成的不是其宿主机的机器代码,则称为交叉编译
二、完整的程序处理过程
- 预处理:文件包含、宏替换
- 连接
- 静态连接
- 动态连接
- 装入时动态连接
- 运行时动态连接
- 装入:将机器程序从外存装入指定内存
三、编译步骤
- 词法分析:从左向右扫描源程序,并进行分析,识别出符合词法规则的单词符号;如果出错,则给出出错信息
- 单词符号:如基本字、标识符、常数、运算符和界符
- 语法分析:对由词法分析识别出来的符号流,按语法规则进行分析,识别出语法单位,给出一个语法树;如果出错,给出出错信息
- 语法单位:例如表达式、短语、子句、句子和子程序、程序等
- 语义分析和中间代码生成:按照语义要求对各种语法单位进行翻译;大多数编译器采用中间语言来描述程序的语义
- 优化:对中间代码进行一些等价变换,使生成的目标程序效率更高
- 代码生成:将中间代码转换成目标代码
- 符号表管理:符号表存储程序中各种数据对象和实体的属性,编译程序负责对这些表格进行创立和维护
- 出错处理:报告错误的性质、发生错误的地方
Warning
中间代码生成和代码优化不是必须的