中間語言(英語: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

外部連結

編輯