單遍編譯器和多遍編譯器有什麼區別?


單遍編譯器

單遍編譯器只讀取程式碼一次,然後進行翻譯。單遍編譯器只對每個編譯單元的部分進行一次掃描。它可以將每一部分翻譯成最終的機器程式。在單遍編譯器中,當處理原始碼行時,它會掃描並提取標記。這與多遍編譯器形成對比,多遍編譯器會分步驟將程式修改為一個或多箇中間表示,並在每次連續掃描中轉換整個編譯單元。

單遍編譯器速度很快,因為所有編譯器程式碼都一次性載入到記憶體中。它可以處理源文字,而無需作業系統關閉一個程序並啟動另一個程序的開銷。單遍編譯器往往對程式常量、型別、變數和過程施加一些限制,這些常量、型別、變數和過程必須在使用前定義。

多遍編譯器

多遍編譯器可以多次處理程式的原始碼。在第一遍中,編譯器可以讀取原始碼,掃描它,提取標記並將結果儲存到輸出檔案中。

在第二遍中,編譯器可以讀取第一遍生成的輸出檔案,構建語法樹並實現語法分析。此階段的輸出是一個包含語法樹的檔案。

在第三遍中,編譯器可以讀取第二遍生成的輸出檔案,並檢查樹是否遵循語言規則。語義分析階段的輸出是帶註釋的語法樹。此過程會持續進行,直到生成目標輸出。

讓我們看看單遍編譯器和多遍編譯器的比較。

單遍編譯器多遍編譯器
它只讀取程式碼一次並同時進行翻譯。
它多次讀取程式碼,每次都將其轉換為多種形式。
它們更快。
它們較慢。因為遍數越多,執行時間就越長。
程式碼最佳化和程式碼生成效率較低。
更好的程式碼最佳化和程式碼生成。
它也稱為“窄編譯器”。它的範圍有限。
它也稱為“寬編譯器”。因為它們可以掃描程式的每一部分。
編譯器需要大量的記憶體。
單遍佔用的記憶體可以被後續遍數重用;因此,編譯器只需要較小的記憶體。
示例 - Pascal 和 C 語言使用單遍編譯。
示例 - Modula-2 語言使用多遍編譯。

更新於:2021年10月23日

14K+ 瀏覽量

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.