Chapter 1 引论
1.1 翻译程序和编译程序
翻译程序(Translator):把某一种语言(源语言程序)等价转换为另一种语言程序(目标语言程序)的程序。
编译程序(Complier):如果源语言为高级语言,而目标语言为编译语言或机器语言之类的低级语言,则称这样的翻译程序为编译程序。
解释程序(Interpreter):将源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序。
采用编译方式在计算机上执行用高级语言编写的程序,需要分阶段进行,一般分为两大阶段:编译阶段和运行阶段。编译阶段首先将源程序通过编译程序编译为机器语言目标程序。运行阶段中将目标程序载入到运行系统中,输入初始数据得到结果。
1.2 编译过程和编译程序的基本结构
1. 词法分析
词法分析的任务是对构成源程序的字符串从左到右进行扫描和分解,根据语言的词法规则,识别出一个个具有独立意义的单词(也称单词符号,简称单词)。
依据原则:构词原则
描述工具:有限自动机
2. 语法分析
语法分析的任务是在词法分析的基础上根据语法规则将单词符号串分解为各类语法单位(如表达式、说明、语句等)并进行语法检查。
依据原则:语法原则
描述工具:上下文无关文法
3. 语义分析和中间代码生成
任务是对各类语法单位按照语言的语义进行初步翻译,分析其含义,并使用另一种语言形式来描述这种语义。
依据原则:语义原则
描述工具:属性文法
4. 代码优化
对前面一个阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码
依据原则:程序的等价变换原则
5. 目标代码生成
将中间代码变换为特定机器上的目标代码,其依赖于硬件系统结构和机器指令的含义。
目标代码三种形式:
- 汇编指令代码:需要汇编
- 绝对指令代码:可以直接运行
- 可重定位指令代码:需要进行链接才能运行
上述5个程序分别称为词法分析程序、语法分析程序、中间代码生成程序、代码优化程序和目标代码生成程序。上述顺序只是逻辑关系,并不代表实际上的时间关系。
错误处理
在编译过程中如果出现错误,程序需要发现源程序中的错误并将有关信息报告给用户。错误包含语法错误和语义错误。
编译前端与后端
编译前端:与源语言有关,如词法分析、语法分析、语义分析与中间代码产生,与机器无关的优化
编译后端:与目标机器有关,与目标机器有关的优化与目标代码产生
带来的好处是:程序逻辑结构清晰,优化更加充分,更有利于移植。
1.3 编译程序的生成方法
生成一个编译程序一般需要考虑以下几个方面:
- 对源语言和目标语言认真分析
- 设计编译算法
- 选择语言编制程序
- 调试编译程序
- 提交相关文档材料
编译语言以汇编语言和机器语言为工具,好处是可以针对具体的机器,充分发挥计算机的系统功能,其生成的程序效率较高;缺点是程序难读、难写、易出错、难维护、生产的效率低下。相反以高级语言编写的程序易读、易理解、生产的效率高