什麼是編譯器遍?
在生成彙編/機器程式碼之前,整個源程式可以被處理多次。
遍 - 對源程式進行一次完整的掃描或處理。各個階段可以安排在一個遍中。詞法、語法和語義分析通常被組合在一個遍中。每個遍讀取源程式並將輸出寫入中間檔案,然後後續遍可以讀取該檔案,即一個遍的輸出將成為下一個遍的輸入。
單遍編譯器 - 在單遍編譯器中,當處理一行原始碼時,它會被掃描並提取標記。然後分析該行的語法,並構建樹結構和一些表格,包括關於每個標記的資料。
最後,在檢查語義部分的正確性後,生成程式碼。對於程式的每一行重複此等效過程,直到整個程式編譯完成。通常,整個編譯器都是圍繞解析器構建的,解析器將呼叫執行不同功能的過程。
單遍編譯器速度很快,因為所有編譯器程式碼都一次性載入到記憶體中。它可以處理源文字,而無需作業系統關閉一個程序並啟動另一個程序的開銷。單遍編譯器往往對程式常量、型別、變數和過程施加一些限制,這些限制必須在使用之前定義。
單遍編譯器的元件之間相互關聯,比多遍編譯器的元件更緊密。這要求所有參與專案的程式設計師都瞭解整個專案。
多遍編譯器 - 編譯器掃描輸入源一次並生成第一個修改後的形式,然後掃描第一個生成的表單並生成第二個修改後的表單,依此類推,直到生成目標表單。這樣的編譯器稱為多遍編譯器。
在多遍編譯器的情況下,編譯器的每個功能都可以由編譯器的一個遍執行。例如,第一遍可以讀取輸入源,掃描並提取標記,並將結果儲存到輸出檔案中。
第二遍可以讀取第一遍生成的,透過構建語法樹進行語法分析,並將所有與樹的每個節點相關的資訊關聯起來。然後,第二遍的輸出是一個包含語法樹的檔案。
第三遍可以讀取第二遍建立的輸出檔案,並透過重構樹結構來執行最佳化。
廣告