編譯器設計 - 概述



計算機是軟體和硬體的均衡組合。硬體只是一塊機械裝置,其功能由相容的軟體控制。硬體理解以電子電荷形式的指令,這是軟體程式設計中二進位制語言的對應物。二進位制語言只有兩個字母,0和1。要發出指令,硬體程式碼必須以二進位制格式編寫,這只是一系列的1和0。對於計算機程式設計師來說,編寫這樣的程式碼將是一項困難且繁瑣的任務,這就是為什麼我們有編譯器來編寫這些程式碼的原因。

語言處理系統

我們已經瞭解到任何計算機系統都是由硬體和軟體組成的。硬體理解一種人類無法理解的語言。因此,我們用高階語言編寫程式,這更容易讓我們理解和記憶。然後將這些程式輸入一系列工具和作業系統元件以獲得機器可以使用的所需程式碼。這被稱為語言處理系統。

Language Processing System

高階語言在各個階段轉換為二進位制語言。編譯器是一個將高階語言轉換為組合語言的程式。類似地,彙編器是一個將組合語言轉換為機器語言的程式。

讓我們首先了解一下使用C編譯器如何在主機上執行程式。

  • 使用者用C語言(高階語言)編寫程式。

  • C編譯器編譯程式並將其轉換為彙編程式(低階語言)。

  • 然後,彙編器將彙編程式轉換為機器碼(目的碼)。

  • 連結器工具用於將程式的所有部分連結在一起以執行(可執行機器碼)。

  • 載入器將所有這些載入到記憶體中,然後執行程式。

在深入研究編譯器的概念之前,我們應該瞭解一些與編譯器密切合作的其他工具。

預處理器

預處理器通常被認為是編譯器的一部分,它是一個為編譯器生成輸入的工具。它處理宏處理、增強、檔案包含、語言擴充套件等。

直譯器

直譯器就像編譯器一樣,將高階語言轉換為低階機器語言。區別在於它們讀取原始碼或輸入的方式。編譯器一次讀取整個原始碼,建立標記,檢查語義,生成中間程式碼,執行整個程式,並且可能涉及多個過程。相反,直譯器從輸入中讀取一條語句,將其轉換為中間程式碼,執行它,然後按順序獲取下一條語句。如果發生錯誤,直譯器將停止執行並報告錯誤。而編譯器即使遇到多個錯誤也會讀取整個程式。

彙編器

彙編器將組合語言程式轉換為機器碼。彙編器的輸出稱為目標檔案,其中包含機器指令的組合以及將這些指令放置在記憶體中所需的資料。

連結器

連結器是一個計算機程式,它將各種目標檔案連結和合並在一起以生成可執行檔案。所有這些檔案可能都由單獨的彙編器編譯。連結器的主要任務是搜尋和定位程式中引用的模組/例程,並確定這些程式碼將載入到的記憶體位置,使程式指令具有絕對引用。

載入器

載入器是作業系統的一部分,負責將可執行檔案載入到記憶體中並執行它們。它計算程式的大小(指令和資料)併為其建立記憶體空間。它初始化各種暫存器以啟動執行。

交叉編譯器

在平臺(A)上執行並能夠為平臺(B)生成可執行程式碼的編譯器稱為交叉編譯器。

源到源編譯器

將一種程式語言的原始碼轉換為另一種程式語言的原始碼的編譯器稱為源到源編譯器。

廣告