- 編譯系統透視:圖解編譯原理
- 新設計團隊
- 598字
- 2019-01-04 03:30:32
1.3.3 從語法樹到中間代碼再到目標代碼
至此,語法樹已經承載了源程序的全部信息,后續的轉換工作就和源程序沒關系了。
如果希望一步到位,從語法樹轉換為目標代碼,理論上和實際上都是可行的。但計算機存在多種CPU硬件平臺,考慮到程序在不同CPU之間的可移植性,先轉換成一個通用的、抽象的“CPU指令”,這就是中間代碼最初的設計思想。然后根據具體選定的CPU,將中間代碼落實到具體CPU的目標代碼。
語法樹是個二維結構,中間代碼是準一維結構,語法樹到中間代碼的轉換過程,本質上是將二維結構轉換為準一維結構的過程。中間代碼特別是RTL已經可以和運行時結構一一對應了。如圖1-40所示。

圖1-40 中間代碼與目標代碼對應的情景示意
運行時結構也是一維的,圖1-40左側部分的轉換結果將更貼近運行時結構。
選定具體的CPU、操作系統后,中間代碼就可以轉換為目標代碼——匯編代碼(我們配置的是AT&T匯編),這時操作系統的影響還比較小。然后由匯編器依照選定操作系統的目標文件格式,將.s文件轉換為具體的目標文件,對于Linux而言是.o文件,對于Windows而言是.obj文件。目標文件中已經是選定的CPU的機器指令了。
最后鏈接器把一個或多個目標文件(庫文件本質上也是目標文件)鏈接成符合選定操作系統指定格式的可執行文件。
通過操作系統,可執行程序就可以被載入內存執行,形成前兩節我們所看到的運行時結構。
本書后續內容將詳細講解編譯的主要過程:詞法分析、語法分析、中間代碼到目標代碼,然后是匯編與鏈接,最后講解預處理。
推薦閱讀
- Visual C++程序設計學習筆記
- Hyper-V 2016 Best Practices
- Learning Selenium Testing Tools with Python
- 跟“龍哥”學C語言編程
- 云計算通俗講義(第3版)
- 概率成形編碼調制技術理論及應用
- Java程序設計:原理與范例
- SAP BusinessObjects Dashboards 4.1 Cookbook
- R大數據分析實用指南
- Test-Driven Development with Django
- 深度學習原理與PyTorch實戰(第2版)
- JavaScript Concurrency
- Java程序設計及應用開發
- RESTful Web API Design with Node.js
- Spring Boot學習指南:構建云原生Java和Kotlin應用程序