編譯原理(1)
阿新 • • 發佈:2019-01-22
引論
程式設計語言及編譯
程式設計語言
- 機器語言
- 組合語言
- 高階語言
編譯程式
編譯程式是現代計算機系統的基本組成部分.
從功能上看,一個編譯程式就是一個語言翻譯程式,它把一種語言(稱作源語言)書寫的程式翻譯成另一種語言(稱作目標語言)的等價的程式.
編譯程式:A語言—–>B語言的程式(兩者邏輯上等價)
編譯程式:高階語言 ——->低階語言
解釋程式:邊解釋邊執行
源程式執行途徑
解釋程式(Interpreter)
- 不產生目標程式檔案
- 不區別翻譯階段和執行階段
- 翻譯源程式的每條語句後直接執行
- 程式執行期間一直有解釋程式守候
- 常用於實現虛擬機器
編譯過程概述
- 詞法分析
- 語法分析
- 語義分析
- 中間程式碼生成
- 程式碼優化
- 目的碼生成
編譯過程與語言翻譯的對比
詞法分析:掃描源程式—–>區分單詞—–>換為屬性字
語法分析:單詞序列—–>語法短語(程式、表示式、條件語句……)檢查語法錯誤,若無錯誤,給出正確的語法結構。這種語法短語也稱語法單位,可表示成語法樹。
語義分析與中間程式碼生成:根據語法結構,分析含義,產生中間程式碼。
中間程式碼多采用三地址指令或四元式形式。
| 算符 | 左運算元| 右運算元 |結果 |
| ————- |:————-:| —–:|—–:|
程式碼優化:時間和空間
目的碼生成:中間程式碼—–>低階語言程式碼
編譯程式結構
- 表格管理
- 出錯處理
源程式錯誤:
- 語法錯誤:不符合語法(或語義)規則的錯誤,可在詞法分析或語法分析時檢測。
- 語義錯誤:不符合語義規則的錯誤,在語義分析(或執行時)可檢測。
遍(趟)pass
- 編譯的若干階段通常以一遍來實現,每遍讀一次輸入檔案、產生一個輸出檔案。
- 多個編譯階段可以組合為編譯的一遍,並且每一遍中的各編譯階段的工作可以相互交錯。
編譯程式的生成
- 移植
- 自編譯
T型圖
- S:編譯程式所實現的源語言
- T:目標語言
- I:編譯程式的實現語言
編譯程式與T型圖
(M機器上執行的)本地編譯器
(M機器上執行的)交叉編譯器
用已有語言L1實現新語言L2
方法:
- 用L1語言編寫A機器的L2語言編譯程式
- 將該L2語言的編譯程式用L1語言的編譯程式進行編譯
移植:
用A機器上已有的語言L編寫一個在B機器上執行的語言L的編譯程式。方法:
- 用L編寫在A機器上執行的產生B機器程式碼的L編譯程式源程式X
- 用L編譯程式對X進行編譯後,得到一個能在A機器上執行的產生B機器程式碼的編譯程式Y(交叉編譯程式)
- 再用Y對X進行編譯,得到能在B機器上執行的L語言的編譯程式