編譯原理(一):介紹
阿新 • • 發佈:2020-10-12
第一章 介紹
1.1 什麼是編譯程式
從基本功能來看,編譯程式是一種翻譯程式。
假設A為源語言,B為目標語言,編譯程式就是將語言A的程式翻譯成語言B的程式
-
編譯程式是較為複雜的翻譯程式
- 需要對源程式進行分析,識別源程式的語法結構資訊,理解源程式的語義資訊,反饋相應的出錯資訊
-
編譯程式通常是從較高階語言的程式翻譯至較低階的語言的程式
C 程式碼 --> 彙編程式碼
-
源語言通常為高階語言,目標語言通常為機器級語言或較低的虛擬機器語言
-
編譯語言的主要泛型
- 命令式語言:C,C++,java
- 面嚮物件語言:java,C++
- 陳述式語言:函式式,邏輯型
- 併發語言:java,Pascal
- 其他:同步語言,指令碼語言
-
編譯程式邏輯結構上至少包含兩大階段
-
- 分析階段:理解源程式,挖掘源程式的語義
- 綜合階段:生成與源程式語義上等價的目標程式
-
-
編譯程式的前端、中端、後端
-
- 前端:實現主要的分析任務,通常以第一次生成中間程式碼為標誌
- 後端:實現主要的綜合任務,通常以從最後一級中間程式碼生成目的碼為標誌
- 中端:實現各級中間程式碼上的操作
-
-
典型編譯程式的邏輯過程
- 出錯處理
- 檢查錯誤:報告出錯資訊
- 排錯:恢復編譯工作
- 編譯程式的遍
- 對一種程式碼形式從頭到尾掃描一遍,將一個程式碼空間變換到另一個程式碼空間
- 程式碼空間=程式碼+符號表+其他有用資訊
解釋程式
不產生目標程式檔案,不區別翻譯階段和執行階段,翻譯源程式的每條語句後直接執行,程式執行期間一直有解釋程式守候,常用於實現虛擬機器
- 比較編譯程式和解釋程式
-
預處理程式
- 支援巨集定義(#define),支援檔案包含(#include),支援其他更復雜的源程式擴充套件資訊
- 預處理程式和編譯程式的關係
-
彙編程式:翻譯組合語言程式至可重定位的機器語言程式
-
裝入和連線程式:對可重定位機器語言程式進行修改,將相對地址變換為機器絕對地址
- 連線程式合併多個可重定位機器語言程式檔案到同一個程式
- 裝入和連線程式產生最終可執行的機器語言程式
- 除錯程式:
- 反饋目標程式執行時資訊,將目標程式執行時資訊與源程式關聯,斷點管理、單步跟蹤、讀/寫目標狀態等功能
- 除錯程式和編譯程式的關係