中间语言
程序执行 |
---|
基础概念 |
代码类型 |
编译策略 |
|
知名运行环境 |
著名编译器及工具链 |
中间语言(英语:Intermediate language),在计算机科学中,是指一种应用于抽象机器(abstract machine)的程式语言,它设计的目的,是用来帮助我们分析计算机程序。这个术语源自于编译器,在编译器将原始码编译为目的码的过程中,会先将原始码转换为一个或多个的中间表述,以方便编译器进行最佳化,并产生出目的机器的机器语言。通常,中间语言的设计与一般的机器语言有三个不同之处:
最常见的中间语言表述形式,是三位址码(Three address code)。
这个术语也同时用来代称一些作为中间层的语言,有些高级语言不会输出为机器语言,它们仅会输出这种中间语言,而这些中间语言则会像一般语言一样,提交给编译器,编译为机器语言。这通常被用于让最佳化的过程更简单,也用于增进可移植性的能力,改进移植的方式则是利用中间语言的编译器,可以编译出许多中央处理器及操作系统可使用的机器码,例如C语言。中间语言的复杂度,通常介于高阶语言及低级语言之间,例如汇编语言。
中介码
[编辑]中介码(IR,intermediate representation)是一种数据结构,可将输入的资料建构为一个计算机程序,也可以将一部份或是所有输出的程式反推回输入资料。这意味著中介码将会保留一些输入资料的资讯,同时拥有更进一步注释或是快速查询的功能。
举一个典型的例子,它是现代许多编译器所拥有的功能,它可将一段程式转换成一个中间层的Graph资料结构,Graph可进行数据流分析,而且可在建立实际运行的CPU指令列表之前进行重组(re-arrangement),这种中间层的使用方式,允许像是LLVM的编译系统可以同时拥有许多不同的前端语言编译器,而且可以产生许多不同架构系统的机器码。
语言
[编辑]C语言虽然并没有明确设计为中间语言,但它天生就是汇编语言的抽象形态,它同时作为类Unix系统及其他作业系统中的系统程式语言(System programming language),这令它成为最热门的中间语言,使用它的包含Eiffel、Sather、Esterel、一些Lisp的方言(Lush, Gambit)、Haskell(Glasgow Haskell Compiler)、Squeak的Smalltalk子集Slang、Cython、Seed7、Vala等等。C的变形已经被用作可携版的汇编语言同时包含C的功能,包含C--及C中间语言(C Intermediate Language)。
微软的通用中间语言,在动态或是静态编译为机器语言之前,可用作.NET框架底下所有编译器共享的中间语言。
多数的中间语言用作支援静态类型的语言,Parrot intermediate representation则是设计用作支援动态类型的语言,最初有Perl及Python。
ILOC中间语言[1]在编译器的设计中,它是用作简单的目标语言[2]
相关条目
[编辑]参考文件
[编辑]- ^ "An ILOC Simulator" (页面存档备份,存于互联网档案馆) by W. A. Barrett 2007, paraphrasing Keith Cooper and Linda Torczon, "Engineering a Compiler", Morgan Kaufmann, 2004. ISBN 1-55860-698-X.
- ^ "CISC 471 Compiler Design" (页面存档备份,存于互联网档案馆) by Uli Kremer