第五章 自下而上分析

2021-08-19 23:51:21 字數 2852 閱讀 9815

1:移進歸約

(1)基本思想

用乙個寄存符號的先進後出棧,把輸入符號乙個乙個地移進到棧裡,當棧頂形成某個產生式的候選式時,即把棧頂的這一部分替換成(歸約為)該產生式的左部符號。

(2)歸約      

是指根據文法的產生式規則,把產生式的右部替換成左部符號。

自下而上分析過程:邊輸入單詞符號,邊歸約。

核心問題:識別可歸約串

2:規範歸約

(1)短語

(2)直接短語

(3)控制代碼

3:修建語法樹

(1)子樹:是由該樹的某個結點(子樹的根)連同它的所有子孫組成。

(2)簡單子樹:只有單層分支的子樹(只有父子兩代沒有第三代)

(3) 對語法樹有如下結論

①每個句型都有一棵語法樹與之對應

②每棵語法樹的葉結點自左至右排列就組成乙個句型

③每棵子樹的葉結點自左至右排列就組成乙個短語

④每棵簡單子樹的葉結點自左至右排列就組成乙個直接短語

⑤每棵最左簡單子樹的葉結點自左至右排列就組成乙個控制代碼

四:演算法優先分析法

(1)算符文法

乙個文法,如果它的任一產生式的右部都不含兩個相繼(並列)的非終結符,即不含如下形式的產生式右部:

…qr…

則我們稱該文法為算符文法,也稱og文法 (operater grammar) 。

約定:a、b代表任意終結符;

p、q、r代表任意非終結符;

『…』代表由終結符和非終結符組成的任意序列,包括空字

(2)定義終結符之間的優先關係

假定g是乙個不含產生式的算符文法。對於任何一對終結符a、b,我們說:

1. a =. b 當且僅當文法g中含有形如p→…ab…或p→…aqb…的產生式;

2. a <. b 當且僅當g中含有形如p→…ar…的產生式, 而r     b…或r     qb…;

3. a>.b 當且僅當g中含有形如p→…rb…的產生式,而 r     …a或r    …aq。

(3)如果乙個算符文法g中的任何終結符對(a,b)至多只滿足下述三關係之一:

a=.b

a>.b

a<.b

則稱g是乙個算符優先文法(opg文法)。

(4).構造算符優先關係表

1:通過檢查產生式的每乙個候選式可以找出滿足a=.b

(即p→…ab…或p→…aqb…的產生式)

2:為了滿足<.和》.,需對g中每個非終結符p構造兩個集合firstvt(p)和lastvt(p):

3:構造集合firstvt(p)的演算法

按其定義,可用下面兩條規則來構造集合firstvt(p):

① 若有產生式p→a…或p→qa…,

則afirstvt(p);

② 若afirstvt(q),且有產生式p→q…,

則afirstvt(p)。

4:同理構造構造集合lastvt(p)的演算法

按其定義,可用下面兩條規則來構造集合lastvt(p):

① 若有產生式p→… a或p→… aq ,

則a lastvt(p);

② 若a lastvt(q),且有產生式p→… q ,

則a lastvt(p)。

5:有了這兩個集合之後,就可以通過檢查每個產生式的候選式確定滿足關係<.和》.的所有終結符對。

五.lr分析法

1.lr分析器

lr(0)分析表的構造

專案、專案集、專案集規範族

專案集的閉包(closure)

有效專案

slr分析表的構造

有效專案

規範lr分析表的構造

lalr(look ahead )分析表的構造

lr分析方法是一種自下而上的分析方法

lr分析法的歸約過程是規範推導的逆過程,所以lr分析過程是一種規範歸約過程

lr分析方法是一種適用於一大類上下文無關文法的分析方法

比較複雜,不適於用手工實現,可借助於yacc/bison實現。

2.lr文法

乙個文法,如果能構造出乙個所有條目都唯一的分析表。

lr(k)文法

最多向前看k個的符號就可以決定動作的lr分析器所分析的文法成為lr(k)文法。

我們最感興趣的是k=0,1

3.活字首

活字首特點:

該字首加上被分析串中未被分析的終結符,就可以構成乙個規範句型

只要輸入串的已掃瞄部分可歸約成乙個活字首,意味著掃瞄過的部分沒有錯誤

活字首與控制代碼間的關係

(1)活字首中已含有控制代碼的全部符號(控制代碼的符號即為其最右符號)。

(2)活字首中含控制代碼的一部分符號(控制代碼開頭的 若干符號與活字首最右的若干個符號一致)。

(3)活字首中全然不包含控制代碼的任何符號 。

活字首的識別與lr分析表構造

lr分析表的構造需要構造識別活字首的有限自動機,

用有限自動機中的狀態表示分析表中的狀態,

用狀態圖中的狀態之間的轉換關係對分析表中的action goto函式等進行定義。

構造識別活字首的nfa

1、構造文法的所有產生式的專案,每個專案都為nfa的乙個狀態。

2、確定初態、控制代碼識別態、句子識別態。

由於s′(起始符)僅在第一產生式的左部出現 ,因此規定起始符相關的專案1為初態

其餘每個狀態都為活字首的識別態(終態)

圓點在最後的專案為控制代碼識別態

第乙個產生式的控制代碼識別態為句子識別態 。

六.lr(0)專案集規範族構造

構成識別乙個文法活字首的dfa專案集(狀態)的全體稱為這個文法的lr(0)專案集規

nfa確定化為dfa的工作量較大,我們考慮直接構造出專案集作為dfa的狀態,就可直接構造dfa。

通過閉包函式(closure)來求dfa乙個狀態的專案集。

第五章 自下而上分析

一 自下而上分析基本問題 1 歸約 其實就是上一章自上而下的分析的逆向 定義 是指根據文法的產生式規則,把產生式的右部替換成左部符號。2 規範規約 推出了短語 直接短語 控制代碼的概念。乙個句型的最左直接短語稱為該句型的控制代碼。規範歸約 最左規約 是關於是乙個最右推導 規範推導 的逆過程。由於規範...

第五章 自下而上分析

一 知識點 自下而上分析法是從輸入串開始,逐步進行 規約 直至規約到文法的開始符號 或者說,從語法樹的末端開始,步步向上 規約 直至根結。歸約 1 短語 令g是乙個文法,s是文法的開始符號,假定 是文法g的乙個句型,如果有s a 且s 則稱 是句型 相對於非終結符的短語。2 直接短語 特別是,如果有...

編譯原理 第五章 自下而上分析

一.移進規約 1.基本思想 用乙個寄存符號的先進後出棧,把輸入符號乙個乙個地移進到棧裡,當棧頂形成某個產生式的候選式時,即把棧頂的這一部分替 換成 歸約為 該產生式的左部符號。2.規約 是指根據文法的產生式規則,把產生式的右部替換成左部符號。二.規範規約 1 短語 定義 令g是乙個文法,s是文法的開...