1. 编译程序:把高级语言书写成的程序翻译成低级语言的等价程序。
2. 源程序:汇编语言或者高级语言的代码。
3. 目标程序:指源程序被编译程序翻译后产生的汇编代码或机械代码。
4. 前端:包括词法分析、语法分析、语义分析、中间代码生成阶段,某些优化工作也在前端完成,依赖于源代码工作。
5. 后端:包括与中间代码相关的阶段,目标代码生成,以及相关出错处理和符号表操作,依赖于目标机工作。
6. 遍:一个编译程序可以由一遍,两遍或者多遍组成。多遍的编译程序比一遍的编译程序占用更少的内存,但是需要多次读写中间文件,时间消耗较大。
7. 编译程序有哪些主要构成成分?各自的主要功能是什么?
词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序,以及表格表格管理程序和出错处理程序。
词法分析程序:将字符从左到右读入,对字符流进行扫描和分析,识别单词,并定义单词的属性
语法分析程序:将单词序列分解为各类语法短语,判断真个输入串是否构成一个语法上正确的程序
语义分析程序:审查源程序有无语义错误,为代码生成阶段收集类型信息
中间代码生成程序:有的编译程序将源语言变成一种内部表示形式,这种内部形式叫做中间语言或中间代码
代码优化程序:对前一阶段产生的中间代码进行变换或进行改造,目的是使目标代码生成更高效
目标代码生成程序:将中间代码变换成特定机器上的绝对代码或可重定位的指令代码或汇编指令代码
表格管理程序:保存编译各个阶段的信息
出错处理程序:报告出错的性质和地点,限制影响,使编译程序可以正常运行,有的编译程序可以自动矫正错误
8. 什么是解释程序?它与编译程序的主要不同是什么?
解释程序接受某个语言的源程序并立即运行这个源程序。
编译程序 | 解释程序 |
---|---|
将源程序全部翻译完之后,才能执行 | 一边翻译,一边执行 |
执行效率高,空间开销小 | 执行效率低,空间开销大 |
交互性差,较复杂 | 交互性好,较简单 |
可以类比为自然语言翻译的笔译和口译
9. 对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代码生成)报告的。
(1)else 没有匹配的 if 语法分析阶段
(2)数组下标越界 语义分析阶段,静态语义
(3)使用的函数没有定义 语义分析阶段
(4)在数中出现非数字字符