1. 程式人生 > >編譯原理(1)

編譯原理(1)

引論

程式設計語言及編譯

程式設計語言

  • 機器語言
  • 組合語言
  • 高階語言

編譯程式

編譯程式是現代計算機系統的基本組成部分.

從功能上看,一個編譯程式就是一個語言翻譯程式,它把一種語言(稱作源語言)書寫的程式翻譯成另一種語言(稱作目標語言)的等價的程式.

編譯程式:A語言—–>B語言的程式(兩者邏輯上等價)

編譯程式:高階語言 ——->低階語言

解釋程式:邊解釋邊執行

源程式執行途徑

這裡寫圖片描述

解釋程式(Interpreter)

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

編譯過程概述

  • 詞法分析
  • 語法分析
  • 語義分析
  • 中間程式碼生成
  • 程式碼優化
  • 目的碼生成

編譯過程與語言翻譯的對比

這裡寫圖片描述

詞法分析:掃描源程式—–>區分單詞—–>換為屬性字

這裡寫圖片描述

語法分析:單詞序列—–>語法短語(程式、表示式、條件語句……)檢查語法錯誤,若無錯誤,給出正確的語法結構。這種語法短語也稱語法單位,可表示成語法樹。

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

語義分析與中間程式碼生成:根據語法結構,分析含義,產生中間程式碼。

中間程式碼多采用三地址指令或四元式形式。

| 算符 | 左運算元| 右運算元 |結果 |
| ————- |:————-:| —–:|—–:|
這裡寫圖片描述

程式碼優化:時間和空間

目的碼生成:中間程式碼—–>低階語言程式碼

編譯程式結構

編譯程式總框

  • 表格管理
  • 出錯處理

源程式錯誤:

  • 語法錯誤:不符合語法(或語義)規則的錯誤,可在詞法分析或語法分析時檢測。
  • 語義錯誤:不符合語義規則的錯誤,在語義分析(或執行時)可檢測。
    這裡寫圖片描述

遍(趟)pass

  • 編譯的若干階段通常以一遍來實現,每遍讀一次輸入檔案、產生一個輸出檔案。
  • 多個編譯階段可以組合為編譯的一遍,並且每一遍中的各編譯階段的工作可以相互交錯。

編譯程式的生成

  • 移植
  • 自編譯

T型圖
這裡寫圖片描述

  • S:編譯程式所實現的源語言
  • T:目標語言
  • I:編譯程式的實現語言

編譯程式與T型圖

(M機器上執行的)本地編譯器
這裡寫圖片描述


(M機器上執行的)交叉編譯器
這裡寫圖片描述
用已有語言L1實現新語言L2
這裡寫圖片描述

方法:

  1. 用L1語言編寫A機器的L2語言編譯程式
  2. 將該L2語言的編譯程式用L1語言的編譯程式進行編譯

移植:
這裡寫圖片描述

用A機器上已有的語言L編寫一個在B機器上執行的語言L的編譯程式。方法:

  1. 用L編寫在A機器上執行的產生B機器程式碼的L編譯程式源程式X
  2. 用L編譯程式對X進行編譯後,得到一個能在A機器上執行的產生B機器程式碼的編譯程式Y(交叉編譯程式)
  3. 再用Y對X進行編譯,得到能在B機器上執行的L語言的編譯程式