單遍編譯器和多遍編譯器有什麼區別?
單遍編譯器
單遍編譯器只讀取程式碼一次,然後進行翻譯。單遍編譯器只對每個編譯單元的部分進行一次掃描。它可以將每一部分翻譯成最終的機器程式。在單遍編譯器中,當處理原始碼行時,它會掃描並提取標記。這與多遍編譯器形成對比,多遍編譯器會分步驟將程式修改為一個或多箇中間表示,並在每次連續掃描中轉換整個編譯單元。
單遍編譯器速度很快,因為所有編譯器程式碼都一次性載入到記憶體中。它可以處理源文字,而無需作業系統關閉一個程序並啟動另一個程序的開銷。單遍編譯器往往對程式常量、型別、變數和過程施加一些限制,這些常量、型別、變數和過程必須在使用前定義。
多遍編譯器
多遍編譯器可以多次處理程式的原始碼。在第一遍中,編譯器可以讀取原始碼,掃描它,提取標記並將結果儲存到輸出檔案中。
在第二遍中,編譯器可以讀取第一遍生成的輸出檔案,構建語法樹並實現語法分析。此階段的輸出是一個包含語法樹的檔案。
在第三遍中,編譯器可以讀取第二遍生成的輸出檔案,並檢查樹是否遵循語言規則。語義分析階段的輸出是帶註釋的語法樹。此過程會持續進行,直到生成目標輸出。

讓我們看看單遍編譯器和多遍編譯器的比較。
| 單遍編譯器 | 多遍編譯器 |
|---|---|
| 它只讀取程式碼一次並同時進行翻譯。 | 它多次讀取程式碼,每次都將其轉換為多種形式。 |
| 它們更快。 | 它們較慢。因為遍數越多,執行時間就越長。 |
| 程式碼最佳化和程式碼生成效率較低。 | 更好的程式碼最佳化和程式碼生成。 |
| 它也稱為“窄編譯器”。它的範圍有限。 | 它也稱為“寬編譯器”。因為它們可以掃描程式的每一部分。 |
| 編譯器需要大量的記憶體。 | 單遍佔用的記憶體可以被後續遍數重用;因此,編譯器只需要較小的記憶體。 |
| 示例 - Pascal 和 C 語言使用單遍編譯。 | 示例 - Modula-2 語言使用多遍編譯。 |
廣告
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP