編譯原理之初步學習

編譯原理篇

前言:

第一次接觸編譯原理,第一次使用MARKDOWN格式寫東西,這也是我的第一篇博客。雖然看書沒有看太懂,但是還是想把自己學習到的留下來,使用一下markdown算是一個小小的開始,希望在日後的學習中能夠更加透徹的理解編譯原理,能夠回來進行一個小小的完善和補充。這裏僅打出編譯原理的框架。
一串代碼從編輯到執行經歷了什麼

Created with Raphaël 2.2.0開始預編譯編譯彙編鏈接結束

分步解答

預編譯

$gcc -E hello.c -o hello.i //預編譯將.c文件編譯爲.i文件

簡單的將預編譯理解爲源碼文本的替換

編譯

$gcc -S hello.i -o hello.s //預編譯將.i文件編譯爲.s文件

詞法分析

  • 掃描
  • 詞法記號
  • 有限自動機
  • 解析器
  • 錯誤處理

語法分析

  • 文法定義
  • 遞歸下降子程序
  • 錯誤處理

符號表管理

  • 符號表數據結構
  • 作用域管理
  • 變量管理
  • 函數管理

語義分析

  • 聲明於定義語義檢查
  • 表達式語義檢查
  • 語句語義檢查
  • 錯誤處理

代碼生成

  • 中間代碼生成
  • 程序運行時儲存
  • 函數定義與return語句翻譯
  • 表達式翻譯
  • 複合語句與break、continue、語句翻譯
  • 目標代碼生成
  • 數據段生成

編譯優化

  • 數據流分析
    • 流圖
    • 數據流分析框架
  • 中間代碼優化
    • 常量傳播
    • 複寫傳播
    • 死代碼消除
  • 寄存器分配
    • 圖着色算法
    • 變量幀偏移計算
  • 窺孔優化

彙編

詞法分析

語法分析

符號表管理

表信息生成

指令生成

目標文件生成

鏈接

信息收集

地址空間分配

符號解析

重定位

程序入口點與運行時庫

可執行文件生成

結語

其實我覺得markdown也是基於這一套編譯流程的語言,只不過針對性比較強。行了我不瞎說了,先這樣吧。今天回去睡覺,明天再做補充。國慶快樂。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章