编译原理
参考资料:
-
- 中间语言的优点:
1、中间语言与具体机器特性无关,一种中间语言可以为生成多种不同型号的目标机的目标代码服务。前端复用。
2、可对中间语言进行与机器无关的优化,有利于提高目标代码的质量。
生成抽象语法树后, 接着将抽象语法树转化为只在编译器内部使用的中间代码(Intermediate Representation,IR)。
之所以特地转化为中间代码,主要是为了支持多种编程语言或者机器语言。例如,GCC 不仅支持C 语言,还可以用来编译C++ 和Fortran。CPU 方面,不仅是Intel 的CPU,还可以生成面向Alpha、SPARC、MIPS 等各类CPU 的机器语言。如果要为这些语言和CPU 的各种组合单独制作编译器,将耗费大量的时间和精力。Intel CPU 用的C 编译器、IntelCPU 用的C++ 编译器、Intel CPU 用的Fortran 编译器、Alpha 用的C 编译器……要制作的编译器的数量将非常庞大(图1.4)。
而如果将所有的编程语言先转化为共同的中间代码,那么对应一种语言或一种CPU,只要添加一份处理就够了(图1.5)。因此支持多种语言或CPU 的编译器使用中间代码是比较合适的。例如GCC 使用的是一种名为RTL(Register TransferLanguange)的中间代码。
根据编译器的不同,也存在不经过中间代码,直接从抽象语法树生成机器语言的情况。本书制作的C 编译器最初并没有使用中间代码,后来发现使用中间代码的话,代码的可读性和简洁性都要更胜一筹,所以才决定使用中间代码。解析代码转化为中间代码为止的这部分内容,称为编译器的前端(front-end)。
- 中间语言的优点:

浙公网安备 33010602011771号