- 编译方法、技术与实践
- 许畅等编著
- 668字
- 2024-09-11 16:26:40
1.2 编译器的结构
编译器的任务是将源代码翻译为目标机器上的目标代码。图1.2中展示的三段式编译器架构把编译过程分为前端、中端与后端:前端与目标机器无关,其对源代码进行一系列的分析和检查,在保证源代码词法、语法、语义正确性的前提下,将源代码翻译为中间代码;中端进行一系列的静态检查与代码优化,检测并报告程序内部可能存在的缺陷,去除冗余代码;后端将中间代码翻译为目标代码,分配寄存器,进行代码的汇编与链接。设计一门新的程序设计语言时,开发者只需要开发针对语言的前端,复用已有的编译器后端,就能将语言源代码翻译为目标机器的机器指令,大大增强了编译器模块的可复用性。同时,语言设计者不需要掌握后端开发的相关技术,降低了语言设计的难度。
图1.2 三段式编译器架构
编译的每个阶段中包含了不同的步骤,编译器完成步骤时将代码从一种表示形式转换成另一种表示形式,如图1.3所示。通常,编译器前端包含三个步骤:词法分析、语法分析和语义分析。词法分析器将源代码拆成词素,分析每个词素是否满足词法规则,并把词素组合为词法单元流;语法分析器读入词法单元流,基于语言的语法规则推导并构建语法分析树;语义分析器分析程序是否满足语义规则(如变量的类型等)并在语法分析树上添加注释。编译器中端将词法、语法、语义正确的,代表程序的注释语法树翻译为中间代码,部分编译器基于中间代码设计优化管道,进行针对中间代码的优化。编译器后端接受中间代码,将其翻译为目标机器相关的目标代码,并进行针对目标代码的相关优化。
图1.3 编译器各模块及中间产物
本书使用一种类C语言(C--语言)来说明编译器如何完成编译过程。