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…,
則afirstvt(p);
② 若afirstvt(q),且有產生式p→q…,
則afirstvt(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是文法的開...