編譯原理簡介

2021-09-24 23:58:22 字數 1514 閱讀 1934

從功能上講,乙個編譯程式就是乙個語言翻譯程式,語言翻譯程式把一種語言(稱為源語言)書寫的程式翻譯成另一種語言(稱為目標語言)的等價程式。

編譯程式的目的就是講源語言程式翻譯成等價的目標語言程式。

常見語言翻譯程式的有:

匯程式設計序:將彙編語言程式翻譯成機器語言程式;

編譯程式:源語言是fortran、pascal或者c那樣的高階語言程式,目標語言是像組合語言或者機器語言那樣的低階語言,這種翻譯的程式就是編譯程式。

​除了編譯程式之外,還需要一些其他程式才能生成乙個可以在計算機上執行的目標程式。

下圖是分析乙個程式語言的典型的處理過程,我們可以從中進一步了解編譯程式的作用:

編譯程式完成從源程式翻譯成目標程式的翻譯工作,是乙個複雜的過程。從概念來講,乙個編譯程式的整個工作過程是劃分成階段進行的,每個階段將源程式的一種表示形式轉換成另一種表示形式,各個階段進行的操作在邏輯上是緊密連線在一起的,下圖給出了乙個編譯過程的各個階段,這是一種典型的劃分方法,將編譯過程劃分成詞法分析、語法分析、語義分析中間**生成、**優化和目標**生成共6個階段。

1. 詞法分析

2. 語法分析

3. 語義分析

​ 語義分析的任務是檢審源程式有沒有語義錯誤,同時為**階段生成而收集型別資訊。型別資訊包含種屬、型別、儲存位置、長度、值等資訊,這些資訊都儲存在符號表中。

4. 中間**生成

​在經過上述的幾個階段之後,有的編譯程式將源程式變成了一種內部表示形式,這種內部形式叫做中間**或中間語言。

(運算子, 運算物件1, 運算物件2, 結果)

5. **優化

​這個階段的任務是對前一階段生成的中間**進行變化或者改造(也可以稱為簡化),目的是使生成的目標**更加高效,省時間、省空間。

6. 目標**生成

這個階段的任務是將中間**變換成特定機器上的絕對指令**(或可重定位的指令**,或彙編指令**)。這是編譯的最後階段,它的工作與硬體系統結構和指令含義有關,這個階段的工作很複雜,涉及硬體系統功能部件的運用、機器指令的選擇、各種資料型別變數的儲存空間分配以及暫存器和後緩暫存器的排程等。

編譯原理入門(三) 詞法分析簡介

詞法分析的主要任務 1.對源程式的 進行從左到右的逐行掃瞄,識別出各個單詞,從而確定單詞的型別。2.將識別出的單詞轉換為統一的機內表示 詞法單元 token 形式,token 種別碼,屬性值 第二點看不懂沒事,先說說什麼是詞法單元形式,token是乙個鍵值對,key是種別碼,什麼是種別碼?請看下圖便...

編譯過程簡介

被隱藏的過程 預編譯 處理所有的注釋,以空格代替 將所有的 define刪除刪除 並且展開所有的巨集定義 處理條件編譯指令 if,ifdef,elif,else,endif 處理 include 展開被包含的檔案 保留編譯器需要使用的 pragma指令指令 預處理指令 編譯 對預處理檔案進行一系列詞...

編譯過程簡介

程式編譯和連線的過程如下所示 編譯器的工作包括 預編譯 編譯 彙編 預編譯 處理所有的注釋,以空格代替 將所有的 define刪除,並且展開所有的巨集定義 處理條件編譯指令 if,ifdef,elif,else,endif 處理 include,展開被包含的檔案 保留編譯器需要使用的 pragma指...