跳至內容

如何編寫編譯器

0% developed
來自華夏公益教科書

許多程式設計師將編寫編譯器視為終極挑戰。不幸的是,大多數程式設計師也認為編寫編譯器是一項極其複雜和艱鉅的任務。然而,編寫編譯器並不需要很複雜。

在深入研究實際編寫編譯器的過程之前,必須學習一些關鍵概念。

理解編譯器的工作原理的關鍵之一是理解抽象的概念。例如,當你上車啟動發動機時,實際上是在執行大量較小的步驟。你正在使用你的肌肉將你的身體移動到車輛中。你正在將鑰匙插入點火裝置。然後你轉動鑰匙直到汽車啟動。

同樣地,理解編譯器要求我們退一步,將該過程視為一系列更大的任務。

我們需要

  • 接受一個輸入檔案。
  • 解析它。
  • 將解析後的形式轉換為另一個內部模型。
  • 從模型中生成一個輸出檔案。

這些步驟中的每一個都被視為一項任務,但每一個都包含許多更小的步驟。例如,接受一個輸入檔案意味著檢查它的存在,檢查檔案許可權以及其他相關任務。同樣地,解析檔案需要將內容分解成越來越小的單元,然後我們可以根據語言的語法對其進行解釋。

編譯器到底是什麼?嗯,編譯器在其最簡單的形式中是一個程式,它將高階語言轉換為低階語言。這是什麼意思?嗯,低階語言更接近目標體系結構,即程式將執行的實際 CPU。

例如,編譯器可以將 C 程式碼翻譯成 x86 彙編。

你經常聽到與“編譯器”相關的詞語是“直譯器”。什麼是直譯器?基本上,直譯器是一個小型程式,它不會將一種語言翻譯成另一種語言,而是僅僅解釋檔案本身,自行執行指令。

令人困惑嗎?希望一個例子能澄清事情

XINTERP 是一個接受 .x 檔案的直譯器。它開啟檔案,讀取指令,並使用自己的內部程式碼執行 .x 檔案中包含的指令。XINTERP 不是編譯器。它不進行翻譯。它只是就地執行檔案。

現在你已經瞭解了編譯器是什麼以及它不是什麼,你可以開始編寫自己的編譯器了。

華夏公益教科書