1. 程式人生 > ><自考學習記錄> 課程代碼6370《編譯技術》<3>

<自考學習記錄> 課程代碼6370《編譯技術》<3>

編譯程序

編譯程序的結構
在1.2中寫到的5個階段是編譯程序工作時的動態特征。
編譯程序的結構可以按照5個階段的任務分模塊進行設計。
技術分享圖片
圖片來源:https://blog.csdn.net/MapleSky2017/article/details/78157596
該圖為比較典型的編譯程序的結構設計圖,該圖清楚的表現了數據的轉換過程。
圖中的詞法分析程序、語法分析程序(語義分析程序)、中間代碼生成程序、代碼優化程序、目標代碼生成程序將分別完成1.2中寫到的5個階段的編譯任務,每個階段的輸出為下一個階段的輸入。第一階段的輸入為源程序,最後階段的輸出為目標程序。
註:每個階段的工作都與表格管理程序和出錯處理程序這兩個模塊相關。
詞法分析程序又稱掃描器
語法分析程序(語義分析程序)又稱分析器
有的編譯程序在識別出各類語法單位後,構造並輸出一棵表示語法結構的語法樹,然後根據語法樹進行語義分析和中間代碼產生。
還有許多編譯程序在識別出語法單位後並不能真正構造語法樹,而是調用相應的語義子程序,這種編譯程序中掃描器分析器中間代碼生成程序三者並非是截然分開的,而是互相穿插的,這樣可以大大提高編譯程序自身的工作效率。
編譯過程中源程序的各種信息被保留在種種不同的表格裏,編譯各階段的工作都涉及到構造、查找或更新有關表格,因此在編譯程序中需要有一組管理各種表格的程序。
如果源程序有錯誤,編譯程序應設法發現錯誤,把有關出錯信息報告給用戶,這部分工作是由專門的一組程序(命名:出錯處理程序
)來完成。
一個好的編譯程序應能最大限度的發現源程序中的各種錯誤,準確指出錯誤性質和發生錯誤的地點,並且能將錯誤所造成的影響限制在盡可能小的範圍內,使得源程序可以繼續編譯其余部分,以便進一步發現其他可能的錯誤,出錯處理程序與編譯的各個階段都有聯系,前三段尤為密切。

PS:要在某臺機器上為某種語言構造一個編譯程序,必須掌握以下三方面內容。
1.源語言,對被編譯的語言要深刻的理解其結構和含義。
2.目標語言,假定目標語言是機器指令,那麽就必須搞清楚硬件的系統結構和操作系統功能。
3.編譯方法,把一種語言程序翻譯成另一種語言的程序。

我作為一個抄書黨,希望的是我個人能夠把書中的每一個角落都看到並能產生自己的理解。

請大家多實踐,多練習,效果會更好,一起努力,一起進步(??????)??

<自考學習記錄> 課程代碼6370《編譯技術》<3>