1. 程式人生 > 實用技巧 >編譯原理(一):介紹

編譯原理(一):介紹

第一章 介紹

1.1 什麼是編譯程式

​ 從基本功能來看,編譯程式是一種翻譯程式。

​ 假設A為源語言,B為目標語言,編譯程式就是將語言A的程式翻譯成語言B的程式

  • 編譯程式是較為複雜的翻譯程式

    • 需要對源程式進行分析,識別源程式的語法結構資訊,理解源程式的語義資訊,反饋相應的出錯資訊
  • 編譯程式通常是從較高階語言的程式翻譯至較低階的語言的程式

    C 程式碼 --> 彙編程式碼

  • 源語言通常為高階語言,目標語言通常為機器級語言或較低的虛擬機器語言

  • 編譯語言的主要泛型

    • 命令式語言:C,C++,java
    • 面嚮物件語言:java,C++
    • 陳述式語言:函式式,邏輯型
    • 併發語言:java,Pascal
    • 其他:同步語言,指令碼語言
  • 編譯程式邏輯結構上至少包含兩大階段

      1. 分析階段:理解源程式,挖掘源程式的語義
      2. 綜合階段:生成與源程式語義上等價的目標程式
  • 編譯程式的前端、中端、後端

      1. 前端:實現主要的分析任務,通常以第一次生成中間程式碼為標誌
      2. 後端:實現主要的綜合任務,通常以從最後一級中間程式碼生成目的碼為標誌
      3. 中端:實現各級中間程式碼上的操作
  • 典型編譯程式的邏輯過程

    ​	[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-UBK1uUP4-1602375705867)(D:\notes\編譯原理.assets\image-20201010105636452.png)]

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-CVbtd82h-1602375705871)(D:\notes\編譯原理.assets\image-20201010110015012.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-kevVyL0l-1602375705872)(D:\notes\編譯原理.assets\image-20201010110523280.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-fUUNgmDI-1602375705880)(D:\notes\編譯原理.assets\image-20201010110851618.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-cFxSwSPl-1602375705880)(D:\notes\編譯原理.assets\image-20201010111055593.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-j06Bgj3N-1602375705881)(D:\notes\編譯原理.assets\image-20201010111115615.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-BrRYsQVn-1602375705882)(D:\notes\編譯原理.assets\image-20201010111201836.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-yXxKw6UC-1602375705882)(D:\notes\編譯原理.assets\image-20201010111244165.png)]

  • 出錯處理
    • 檢查錯誤:報告出錯資訊
    • 排錯:恢復編譯工作
  • 編譯程式的遍
    • 對一種程式碼形式從頭到尾掃描一遍,將一個程式碼空間變換到另一個程式碼空間
    • 程式碼空間=程式碼+符號表+其他有用資訊

解釋程式

不產生目標程式檔案,不區別翻譯階段和執行階段,翻譯源程式的每條語句後直接執行,程式執行期間一直有解釋程式守候,常用於實現虛擬機器

  • 比較編譯程式和解釋程式

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-MbKE4Czj-1602375705883)(D:\notes\編譯原理.assets\image-20201010112002989.png)]

  • 預處理程式

    • 支援巨集定義(#define),支援檔案包含(#include),支援其他更復雜的源程式擴充套件資訊
    • 預處理程式和編譯程式的關係
    • [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-UP9Esfgg-1602375705883)(D:\notes\編譯原理.assets\image-20201010112216757.png)]
  • 彙編程式:翻譯組合語言程式至可重定位的機器語言程式

  • 裝入和連線程式:對可重定位機器語言程式進行修改,將相對地址變換為機器絕對地址

    • 連線程式合併多個可重定位機器語言程式檔案到同一個程式
    • 裝入和連線程式產生最終可執行的機器語言程式

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-LfJ4uuBT-1602375705884)(D:\notes\編譯原理.assets\image-20201010112615015.png)]

  • 除錯程式:
    • 反饋目標程式執行時資訊,將目標程式執行時資訊與源程式關聯,斷點管理、單步跟蹤、讀/寫目標狀態等功能
  • 除錯程式和編譯程式的關係

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-llmG2FfO-1602375705884)(D:\notes\編譯原理.assets\image-20201010112729186.png)]