【cs基礎】編譯器的普及

編譯器是什麼

編譯器就是一種翻譯程序,一般是將高級語言編寫的源代碼轉化成彙編或者機器碼。說白了就是把我們用python,java等各種語言寫的程序,翻譯成計算機能看懂的二進制指令數據,以便運行.

編譯流程

source –> 詞法分析 == 各種記號Token stream
–> 語法分析 == 語法樹
–> 語義分析 == 優化後的語法樹
–> 中間代碼生成 == 中間代碼
–> 中間代碼優化 == 優化後的中間代碼
–> 目標代碼生成 == 目標代碼
–> 目標代碼優化 == target program

流程詳解

  1. 詞法分析

     將源代碼的標識符、運算符等分割成一個個記號
    
  2. 語法分析

    解析得到的一個個記號,根據語法規則生成一種抽象語法樹
    

    語法樹

  3. 語義分析

    編譯器開始對語法樹進行一次或多次的遍歷,檢查程序的語義規則:變量聲明、類型匹配..等
    
  4. IR生成(中間代碼,intermediate Representation)

    一般生成的算法是一個遞歸的算法,遞歸的遍歷語法樹,將語法樹上的一些節點替換成中間代碼塊,再根據特定的規則和順序將這些中間代碼塊拼裝起來。
    
    爲什麼不直接生成目標代碼?增加編譯器的開發擴展性;便於對代碼優化,中間代碼的優化要比直接在目標代碼優化難度低得多。
    
  5. IR優化

    各種優化:
    去除冗餘代碼
    優化循環、算術表達式等
    
  6. 目標代碼生成

    編譯器根據中間代碼和目標機器架構生成目標代碼。
    
  7. 目標代碼優化

    利用目標機器的提供的特性對目標代碼做進一步的優化,如利用 CPU 的流水線,利用 CPU 的多核等,生成最終的目標代碼
    

參考:http://pandolia.net/tinyc/ch6_compiler_overview.html

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