編譯原理實驗

2022-12-24 20:09:07 字數 2143 閱讀 5079

第一篇高階程式語言到中間語言

第一章編譯概論及程式語言規定

1.1 編譯程式概論

計算機執行乙個高階語言程式一般要分為兩步:第一步,用乙個編譯程式把高階語言翻譯成機器語言程式;第二步,執行所得的機器語言程式,求得計算結果。

編譯程式的工作貫穿於從輸入源程式開始到輸出目標程式為止的整個過程,是非常複雜的。一般來說,整個過程可以劃分成五個階段:詞法分析、語法分析、中間**生成、優化和目標**生成。

第一階段,詞法分析。詞法分析的任務是輸入源程式,對構成源程式的字串進行掃瞄和分解,識別出乙個個單詞符號,如保留字、識別符號、常數、算符和界符等。

第二階段,語法分析。語法分析的任務是:在詞法分析的基礎上,根據語言的語法規則(文法規則)把單詞符號串分解成各類語法單位(語法範疇),如「短語」、「子句」、「句子」、「程式段」和「程式」。

通過語法分析確定整個輸入串是否構成乙個語法上正確的「程式」。

源程式單詞符號

誤法單位

四元式四元式

目標程式

圖1—1 編譯程式結構示意

第三階段,中間**產生。按語言的語義將語法分析出來的語法單位翻譯成中間**。一般而言,中間**是一種獨立於具體硬體的記號系統,但它與計算機的指令形式有某種程度的接近,或者能夠比較容易地把它變換成計算機的機器指令。

常用的中間**有四元式、三元式、間接三元式和逆波蘭記號等。

第四階段,優化。優化的任務在於對前階段產生的中間**進行加工變換,以期在最後階段能產生出更為高效(節省時間和空間)的目標**。

第五階段,目標**生成。這一階段的任務是:把中間**(或經優化處理之後)變換成特定機器上的絕對指令**或可重新定位的指令**或彙編指令**。

這一階段實現了最後的翻譯,它的工作有賴於硬體系統結構和機器指令含義。

上述編譯過程的五個階段是編譯程式工作時的動態特徵,編譯程式的結構可以按照這五個階段的任務分模組進行設計。編譯程式的結構示意如圖1—1所示。

另外要注意的是:在許多編譯程式中,詞法分析器﹑語法分析器和中間**生成器三者並非是截然分開的,而是相互穿插的。這樣可以大大提高編譯程式自身的工作效率。

1.2 關於高階程式語言的規定

高階語言程式具有四種基本結構:順序結構﹑選擇結構﹑迴圈結構和過程。為了便於掌握編譯的核心內容,突出重點,簡化編譯程式的結構,同時又涵蓋高階語言程式的基本結構,我們選取賦值語句﹑if語句和while語句作為前三種結構的代表,略去了過程結構。

實際上,上述三種語句已經基本滿足了高階語言的程式設計。因此,我們僅考慮由下面產生式所定義的程式語句:

s→if b then s else s ︱while b do s ︱begin l end︱a

l→s;l︱s

a→i:=e

b→b∧b︱b∨b︱┓b︱(b) ︱i rop i︱i

e→e+e︱e*e︱(e) ︱i

其中,各非終結符的含義如下:

s ─ 語句

l ─ 語句串

a ─ 賦值句

b ─ 布林表示式

e ─ 關係表示式

各終結符的含義如下:

i ─ 整型變數或常數﹑布林變數或常數

rop ─ 六種關係運算子的代表

起語句分隔符作用

賦值符號

邏輯非運算子

邏輯與運算子

邏輯或運算子

算術加運算子

算術乘運算子

左括號右括號

注意,六種關係運算子分別為:

(1) < :小於 (2) <= :小於等於 (3) <> :不等於

(4) > :大於 (5) >= :大於等於 (6) = :等於

關於表示式的運算,我們規定由高到低優先順序為:(1)算術運算;(2)關係運算;(3)布林運算;並且服叢左結合規則。算術運算子優先順序的順序依次為布林運算子優先順序的順序依次為六個關係運算子優先順序相同。

我們規定的程式是由一條語句或由begin和end巢狀起來的復合語句組成,並且規定在語句末要加上「#~」表示程式結束。下面給出的是符合規定的程式示例:

begin

a:=a+b*c;

c:=a+2;

while awhile a>b do

if m=n then c:=d

else while a<=d do

a:=d;

end#~

編譯原理實驗

實驗三中間的 優化 一 實驗目的 掌握區域性優化方法 提高機器的執行速度 二 相關知識 某些編譯程式在中間 或目標 生產之後要對其進行優化,所謂優化就是對 進行等價的變換。而變換後的 執行結果與變換前的 執行結果相同。而執行速度加快或占用記憶體空間減少。中間的 優化就是對中間 進行等價的變換。基本塊...

編譯原理實驗一

編譯原理課程 2015 2016年度第2學期 實驗題目 詞法分析程式設計 院系 計算機學院 班級130808 學號 3113003906 姓名 王峰 任課教師 白明成績評定 完成日期 2016年 5 月 21 日 一 程式設計題目與說明 設計乙個關於某種高階語言子集的詞法分析程式 功能包括 輸入源程...

編譯原理實驗三

實驗報告 第 2 組 專業 軟體工程 班級 3 學號 123012012095 94 101 103 姓名吳藝萍 陳璐 崔旻 劉超群 實驗日期 2014 年 3 月 20 告退發 訂正 重做 課程實驗名稱遞迴下降的 分析 一 實驗目的 1.學會用語法圖來形式化地描述一門簡單的語言 2.掌握遞迴下降的...