基本概念
- 編譯:把源程序轉換爲目標程序的過程
- 翻譯程序:掃描所輸入的源程序,將其轉換爲目標程序或者直接翻譯成結果
- 編譯程序:即編譯器,將源程序翻譯成目標程序的翻譯器;源程序和數據分開處理
- 解釋程序:解釋器,直接執行源程序的翻譯器,不生成目標程序,同時處理源程序和數據
- 編譯程序:即編譯器,將源程序翻譯成目標程序的翻譯器;源程序和數據分開處理
- 翻譯過程
- 高級語言程序——編譯程序——>低級語言程序
- 彙編語言——彙編程序——>機器語言程序
- 編譯的階段和任務
- 分析階段
* 語法分析
* 詞法分析
* 語義分析- 綜合階段
* 中間代碼生成
* 代碼優化
* 目標代碼生成- 符號表的管理
- 錯誤診斷和處理
-
分析階段:對源程序進行結構分析和語義分析,從而把源程序正文轉換爲某種內部表示形式
-
語法分析:依次讀入源程序的每個字符,對構成源程序的字符進行分解,並識別出來特殊的字符串,例如變量名等
- 空格:被刪去
- 註釋:被跳過
- 識別出來的標識符放入符號表,並對某些加上屬性值
-
詞法分析:層次結構分析,根據語法進行分組
-
語義分析:對語句的意義進行檢查
- 類型檢查:
- 每個運算符和運算對象是否符合要求
- 數組下標是否合法
- 形參實參是否匹配,類型是否匹配
- 類型檢查:
-
-
綜合階段
- 中間代碼生成:一種抽象的機器程序
- 代碼優化:對代碼進行改進,使其佔用空間少,運行速度快
- 目標代碼生成:一般生成可以重定位的機器代碼或者彙編語言代碼
- 對程序使用的每個變量要指定存儲單元
- 對變量進行存儲器分配
-
符號表管理
- 記錄源程序使用的標識符
- 收集每個標識符的各種屬性信息
-
錯誤處理
- 詞法分析檢測出來的非法字符錯誤
- 語法分析出來的不符合語法規則錯誤
- 語義分析出來的操作無意義的結構
- 代碼生成程序檢測出來的目標程序區超範圍,計算機容量限制等
-
其他概念:
- 前端:編譯程序中與源程序語言有關,與目標機器無關的部分
- 後端:編譯程序中與目標機器有關的部分
- 遍:對源程序或者中間形式從頭到尾掃描一遍,並作加工處理,生成新的中間形式或者目標程序
-
預處理器:
- 宏處理器:主要處理宏定義和宏調用
- 文件包含:主要把文件的包含聲明擴展爲程序正文
- 例如用#include <stdio.h>時,就用stdio.h的內容替換此語句
- 語言擴充:用更先進的控制流和數據結構來增強原來的語言。
-
彙編程序
- 助記符表示操作碼。標識符表示存儲地址
-
連接裝配程序:
- 讀入:
- 讀入可重定位的機器代碼
- 修改重定位地址
- 把修改後的指令和數據存放在適當的地方或者形成可執行文件
- 連接
* –把幾個可重定位的機器代碼文件連接成一個可執行的程序
- 讀入: