- 解释下列术语:编译程序,源程序,目标程序,编译程序的前端、后端和遍。
答:
(1)编译程序:源语言为高级语言,目标语言为汇编语言或机器语言的翻译程序称为编译程序。
(2)源程序:待翻译的程序,即高级程序设计语言编写的程序。
(3)目标程序:翻译后的程序,即汇编语言或机器语言。
(4)前端:编译过程中主要依赖于源语言与目标机无关的阶段,包括词法分析、语法分析、语义分析和中间代码生成。某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指依赖于目标机而一般不依赖源语言,只与中间代码有关的阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
- 编译程序有哪些主要构成成分?各自的主要功能是什么?
答:
编译程序的主要构成成分有: 词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、表格管理程序及出错处理程序。
(1)词法分析程序:从左到右扫描源程序,识别出各个单词,确定单词的类型并将其转换成单词串;同时查词法错误,进行标识符登记,即符号表管理。
(2)语法分析程序:识别由词法分析给出的单词符号串是否是给定文法的句子
(3)语义分析程序:审查源程序是否有语义错误,为代码生成阶段收集类型信息,当不符合规范的时候报错。
(4)中间代码生成程序:将源程序转换成一种内部表示形式,如三地址指令或四元式。
(5)中间代码优化程序:对中间代码进行等价变换处理以提高执行效率。
(6)目标代码生成程序:将优化的中间代码转换成目标机上的机器指令代码或汇编代码。
(7)表格管理程序:管理各种符号表(常数、标号、变量、过程、结构……),查、填(登记、查找)源程序中出现的符号和编译程序生成的符号,为编译的各个阶段提供信息。
(8)错误处理程序:进行各种错误的检查、报告、纠正,以及相应的续编译处理。
- 什么是解释程序?它与编译程序的主要不同是什么?
答:
解释程序直接执行源程序给出运行结果。工作模式:一个个的获取、分析并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并且生成结果。
不同:编译程序将源高级语言程序翻译成汇编或机器语言程序,而解释程序则是分析处理源高级语言程序直接计算结果,不生成目标语言程序。
- 对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代码生成)报告的。
(1)else没有匹配的if。
(2)数组下标越界。
(3)使用的函数没有定义。
(4)在数中出现非数字字符。
答:
else没有匹配的if | 语法分析 |
数组下标越界 | 语义分析 |
使用的函数没有定义 | 语义分析 |
在数中出现非数字字符 | 词法分析 |