編譯原理篇
前言:
第一次接觸編譯原理,第一次使用MARKDOWN格式寫東西,這也是我的第一篇博客。雖然看書沒有看太懂,但是還是想把自己學習到的留下來,使用一下markdown算是一個小小的開始,希望在日後的學習中能夠更加透徹的理解編譯原理,能夠回來進行一個小小的完善和補充。這裏僅打出編譯原理的框架。
一串代碼從編輯到執行經歷了什麼
分步解答
預編譯
$gcc -E hello.c -o hello.i //預編譯將.c文件編譯爲.i文件
簡單的將預編譯理解爲源碼文本的替換
編譯
$gcc -S hello.i -o hello.s //預編譯將.i文件編譯爲.s文件
詞法分析
- 掃描
- 詞法記號
- 有限自動機
- 解析器
- 錯誤處理
語法分析
- 文法定義
- 遞歸下降子程序
- 錯誤處理
符號表管理
- 符號表數據結構
- 作用域管理
- 變量管理
- 函數管理
語義分析
- 聲明於定義語義檢查
- 表達式語義檢查
- 語句語義檢查
- 錯誤處理
代碼生成
- 中間代碼生成
- 程序運行時儲存
- 函數定義與return語句翻譯
- 表達式翻譯
- 複合語句與break、continue、語句翻譯
- 目標代碼生成
- 數據段生成
編譯優化
- 數據流分析
- 流圖
- 數據流分析框架
- 中間代碼優化
- 常量傳播
- 複寫傳播
- 死代碼消除
- 寄存器分配
- 圖着色算法
- 變量幀偏移計算
- 窺孔優化
彙編
詞法分析
語法分析
符號表管理
表信息生成
指令生成
目標文件生成
鏈接
信息收集
地址空間分配
符號解析
重定位
程序入口點與運行時庫
可執行文件生成
結語
其實我覺得markdown也是基於這一套編譯流程的語言,只不過針對性比較強。行了我不瞎說了,先這樣吧。今天回去睡覺,明天再做補充。國慶快樂。