編譯原理六七章總結

2021-08-20 18:39:26 字數 4750 閱讀 3067

第六章

一:屬性文法

是在上下文無關文法的基礎上為每個文法符號(終結符或非終結符)配備若干個相關的「值」(稱為屬性)。

屬性:代表與文法符號相關的資訊,和變數一樣,可以進行計算和傳遞。

(1)綜合屬性

用於「自下而上」傳遞資訊

在語法樹中,乙個結點的綜合屬性的值,由其子結點的屬性值確定

(2)繼承屬性

用於「自上而下」傳遞資訊。

在語法樹中,乙個結點的繼承屬性由此結點的父結點和/或兄弟結點的某些屬性確定

(2)繼承屬性

用於「自上而下」傳遞資訊。

在語法樹中,乙個結點的繼承屬性由此結點的父結點和/或兄弟結點的某些屬性確定

4.語義規則所描述的工作

屬性計算

靜態語義檢查

符號表操作

**生成

在乙個屬性文法中,對應於每個產生式a都有一套與之相關聯的語義規則,每條語義規則的形式為:

b:=f(c1,c2,…,ck)  

這裡f是乙個函式,而且或者

(1)b是a的乙個綜合屬性並且c1,c2,…ck是產生式右邊文法符號的屬性;或者

(2)b是產生式右邊某個文法符號的乙個繼承屬性並且c1,c2,…ck是a或產生式右邊任何文法符號的屬性

在這兩種情況下,我們都說屬性b依賴於屬性c1,c2,…,ck.

注意:(1)終結符只有綜合屬性,它由詞法分析器提供

(2)非終結符既可以有綜合屬性也可以有繼承屬性,文法開始符號的所有繼承屬性作為屬性計算前的初始值。

二:基於屬性文法的處理方法

1 輸入串語法樹依賴圖語義規則計算次序計算結果

這種由源程式的語法結構所驅動的處理辦法就是語法制導翻譯法。

語義規則的計算可能產生**、在符號表中存放資訊、給出錯誤資訊或執行任何其它動作。對輸入串的翻譯也就是根據語義規則進行計算得出結果。

2 屬性的計算次序

乙個有向非迴圈圖的拓撲序是圖中結點的任何順序m1,m2, …mk,使得邊必須是從序列中前面的結點指向後面的結點。也就是說,如果mimj是mi到mj的一條邊,那麼在序列中mi必須出現在mj之前。

3、樹遍歷的屬性計算方法

假設語法樹已經建立起了,並且樹中已帶有開始符號的繼承屬性和終結符的綜合屬性。然後以某種次序遍歷語法樹,直至計算出所有的屬性。

4.抽象語法樹

從語法樹中去掉對翻譯不必要的資訊,而獲得更有效的源程式中間表示。

這種經變換後的語法樹稱之為抽象語法樹

三:屬性文法的自下而上計算

s—屬性文法,它只含有綜合屬性。

綜合屬性可以在分析符號串的同時由自上而下的分析器來構造

分析器可以儲存與棧中文法符號有關的綜合屬性值

每當進行歸約時,新的屬性值就由棧中正在歸約的產生式右邊符號的屬性值來計算

可以通過擴充分析器中的棧來存放這些綜合屬性值

s-屬性文法的翻譯器通常可借助於lr分析器實現

四:l-屬性文法的自頂向下翻譯

屬性的計算次序受分析方法所限定的分析樹結點建立次序的限制

分析樹的結點是自左向右生成

如果屬性資訊是自左向右流動,那麼就有可能在分析的同時完成屬性計算

五:翻譯模式

翻譯模式是語法制導定義的一種便於翻譯的書寫形式。其中屬性與文法符號相對應,語義規則或語義動作用花括號{ }括起來,可被插入到產生式右部的任何合適的位置上。

這是一種語法分析和語義動作交錯的表示法,他表達在按深度優先遍歷分析樹的過程中何時執行語義動作。

翻譯模式給出了使用語義規則進行計算的順序。可看成是分析過程中翻譯的注釋。

從翻譯模式中消除左遞迴  

對於乙個翻譯模式,若採用自頂向下分析,必須消除左遞迴和提取左公因子,在改寫基本文法時考慮屬性值的計算。

第七章一:語義分析概述

語義分析任務

1.審查每乙個語法結構的靜態語義,即驗證語法正確的結構是否有意義。

2.在語義正確的基礎上生成一種中間**或目標**。

語義分析範圍

1.確定型別:確定識別符號所關聯的資料型別。

2.型別檢查:按語言的型別規則,檢查運算的合法性與運算分量型別的一致性,必要時作型別轉換。

3.識別含義:根據語言的語義定義(形式或非形式),識別程式中各構造成分組合到一起的含義,並作相應的語義處理

4.控制流檢查:控制流語句必須轉移到合法的地方。如c中,break語句規定跳出最內層的迴圈或switch語句。

5.一致性檢查:在很多場合要求物件只能被說明一次。如:pascal語言規定同乙個識別符號在乙個分程式中只能被說明一次等。

語法制導翻譯 

所謂語法制導翻譯是指:對文法中的每個產生式都附加上乙個語義動作或語義子程式。伴隨著語法分析,每當使用一條產生式進行推導或歸約時,就執行相應產生式的語義動作(包括:查填**,改變變數的求值,診察與報告錯誤,生成中間**等),從而完成預定的翻譯工作。

圖表示法

抽象語法樹。    

無迴圈有向圖(dag)

dag與抽象語法樹基本上一樣,對表示式中的每個子表示式,dag中都有乙個結點。乙個內部結點表示乙個操作符,它的孩子表示運算元。

兩者所不同的是,在乙個dag中代表公共子表示式的結點具有多個父結點,而在一棵抽象語法樹中公共子表示式被表示為重複的子樹。

二:三元式

逆波蘭表示法

波蘭表示是一種既不須考慮優先關係、又不用括號的一種表示表示式的方法(字首式)。

現在我們要介紹的剛好是另一種波蘭表示形式,稱為字尾式,即運算子在後。

1.三元式由三個部分組成:

算符:op

第一運算分量:arg1

第二運算分量:arg2

語法制導產生三元式

(1) e→e1 op e2  我們用e.val表示乙個指示器,它或指向有關符號表的某項,或指向三元式表的某項,於是其語義子程式為:

這兒trip(op,arg1,arg2)是乙個語義過程,它產生(op,arg1,arg2)並放入三元式表中,返回三元式在表中的位置

(2)e→i 

entry是乙個語義過程,它查詢i在符號表中的位置。若用lookup(name)函式表示對name查詢符號表,找到則返回表項位置,找不到則返回null。 於是可如下實現:

詞法分析器掃瞄到識別符號i時送回(種別碼,i值),語法分析器把i放入語義變數i.lexcal中,這時就可以呼叫entry過程:

無迴圈有向圖(dag)

dag與抽象語法樹基本上一樣,對表示式中的每個子表示式,dag中都有乙個結點。乙個內部結點表示乙個操作符,它的孩子表示運算元。

兩者所不同的是,在乙個dag中代表公共子表示式的結點具有多個父結點,而在一棵抽象語法樹中公共子表示式被表示為重複的子樹

三:某些語句的四元式及翻譯

說明語句的翻譯

為區域性名字建立符號表條目

為它分配儲存單元

符號表中包含名字的型別和分配給它的儲存單元的相對位址等資訊    

一、說明語句的翻譯

程式語言中的說明語句都是給編譯程式提供資訊的,諸如型別、維數、每維的界種類等,因此一般不生成目標,只是在編譯時把有關資訊填入相應**即可。

型別轉換

我們可以把型別資訊反映到運算子中,例如用+i,*i表示定點+、*,用+r,*r表示浮點+、*。有的程式語言允許混合運算,有的不允許。如果不允許,則發現有型別不相同的運算分量就應該報錯。如果允許,就要進行型別轉換。

四:迴圈與分情況語句的翻譯

例如f1→for i:=e1 對應的語義動作:

(1)產生四元式:emit(:=,e1.place,--,entry(i));

(2)保留entry(i):f1.place:=entry(i);

(3)因為goto over 的轉移位址暫時填不上,必須

建鏈:f1.chain:=nextquad;

(4)產生無條件轉移指令:emit(j,--,--,0);

五:過程呼叫的翻譯

1. 過程呼叫主要解決兩個問題:

(1)把程式控制轉移到子程式(過程段),執行完畢再返回。這個問題很好解決。

(2)傳遞實在引數。我們前面談到過幾種不同的引數傳遞方式(傳名、傳值、傳位址),它們的語義動作也就有所區別。

六:中間**

把經過語法分析和語義分析而獲得的源程式中間表 示翻譯為中間**表示。

中間語言 

語法樹 

字尾式三位址**表示

圖表示法 

語法樹,有向非迴圈圖和字尾式表示源程式的自然層次結構。

三位址語句的種類

1.賦值語句

2.無條件轉移語句

3.條件轉移語句

4.複製語句

5.過程呼叫語句

6.索引語句

7.位址和指標語句

布林表示式

用布林運算符號(and,or,not)作用到布林變數或關係表示式上而組成

布林表示式的作用:

1. 用作計算邏輯值

2. 用作控制流語句如if-then,if-then-else和while-do等之中的條件表示式

控制流語句中的布林表示式的翻譯

對於出現在條件語句  if e then s1 else s2中的布林表示式e,其作用就是控制對s1和s2的選擇

因此,作為條件的布林表示式,把它設計成兩個出口:e.true   和   e.false

考慮e的上下文,對於if語句,e.true   指向s1,   e.false指向s2;對於while語句e.true  指向迴圈的開始,   e.false指向while 的下一語句 回填

兩遍掃瞄:

對語法樹按深度優先遍歷,來進行語義分析

從給定的輸入構造出一棵語法樹;

一遍掃瞄:語法制導翻譯技術是屬於一遍掃瞄分析

編譯原理課程總結 第3章

詞法分析器 詞法分析器的功能和輸出形式 關鍵字,識別符號,常數,運算子,界符 單詞符號的識別 超前搜尋 在單詞識別的過程中,通過向前多讀幾個符號的形式,準確的進行單詞的識別。一旦確定識別到的單詞之後,需要進行掃瞄指標的回退,保證單詞識別工作的順利進行 直接分析法 根據讀來的第乙個字元的種類分別轉到各...

編譯原理第五章總結

第五章 語法分析 自下而上分析 1.短語定義 令g是乙個文法,s是文法的開始符號,假定 是文法g的乙個句型 其中 vn vt a vn 如果有 則 稱是句型 相對於非終結符a 的短語 兩個條件必須都滿足 2.規範歸約是關於是乙個最右推導的逆過程,由規範推導推出的句型稱為規範句型。3.算符優先分析法 ...

編譯原理 總結

一 編譯程式 1 編譯器是一種翻譯程式,它用於將源語言 即用某種程式語言寫成的 程式翻譯為目標語言 即用二進位制數表示的偽機器 寫成的 程式。後者在windows作業系統平台下,其檔案的副檔名通常為.obj。該檔案通常還要經過進一步的連線,生成可執行檔案 機器 寫成的程式,擴充套件名為.exe 通常...