中间语言

中间语言(英语:Intermediate language),在计算机科学中,是指一种应用于抽象机器(abstract machine)的编程语言,它设计的目的,是用来帮助我们分析计算机程序。这个术语源自于编译器,在编译器将源代码编译为目的码的过程中,会先将源代码转换为一个或多个的中间表述,以方便编译器进行最佳化,并产生出目的机器的机器语言。通常,中间语言的设计与一般的机器语言有三个不同之处:

  • 每个指令代表仅有一个基本的操作。举例来说,在微处理器中出现的shift-add定址模式在中间语言不会出现。
  • 指令集内可能不会包含控制流程的资讯。
  • 暂存器可用的数量可能会很大,甚至没有限制。

最常见的中间语言表述形式,是三位址码(Three address code)。

这个术语也同时用来代称一些作为中间层的语言,有些高级语言不会输出为机器语言,它们仅会输出这种中间语言,而这些中间语言则会像一般语言一样,提交给编译器,编译为机器语言。这通常被用于让最佳化的过程更简单,也用于增进可移植性的能力,改进移植的方式则是利用中间语言的编译器,可以编译出许多中央处理器操作系统可使用的机器码,例如C语言。中间语言的复杂度,通常介于高阶语言及低级语言之间,例如汇编语言

中介码

中介码(IR,intermediate representation)是一种数据结构,可将输入的资料建构为一个计算机程序,也可以将一部分或是所有输出的程式反推回输入资料。这意味着中介码将会保留一些输入资料的资讯,同时拥有更进一步注释或是快速查询的功能。

举一个典型的例子,它是现代许多编译器所拥有的功能,它可将一段程式转换成一个中间层的Graph数据结构,Graph可进行数据流分析,而且可在建立实际运行的CPU指令列表之前进行重组(re-arrangement),这种中间层的使用方式,允许像是LLVM的编译系统可以同时拥有许多不同的前端语言编译器,而且可以产生许多不同架构系统的机器码。

语言

C语言虽然并没有明确设计为中间语言,但它天生就是汇编语言的抽象形态,它同时作为类Unix系统及其他操作系统中的系统编程语言(System programming language),这令它成为最热门的中间语言,使用它的包含EiffelSatherEsterel、一些Lisp的方言(Lush, Gambit)、HaskellGlasgow Haskell Compiler)、Squeak的Smalltalk子集Slang、CythonSeed7Vala等等。C的变形已经被用作可携版的汇编语言同时包含C的功能,包含C--C中间语言(C Intermediate Language)。

微软的通用中间语言,在动态或是静态编译为机器语言之前,可用作.NET框架底下所有编译器共享的中间语言。

GCC使用不同的中间语言来达到简化行动性及跨平台,包含:

多数的中间语言用作支援静态类型的语言,Parrot intermediate representation则是设计用作支援动态类型的语言,最初有Perl及Python。

ILOC中间语言[1]在编译器的设计中,它是用作简单的目标语言[2]

相关条目

参考文件

  1. ^ "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.
  2. ^ "CISC 471 Compiler Design"页面存档备份,存于互联网档案馆) by Uli Kremer

外部链接