一.移進規約
1.基本思想
用乙個寄存符號的先進後出棧,把輸入符號乙個乙個地移進到棧裡,當棧頂形成某個產生式的候選式時,即把棧頂的這一部分替
換成(歸約為)該產生式的左部符號。
2.規約
是指根據文法的產生式規則,把產生式的右部替換成左部符號。
二.規範規約
1)短語:
定義:令g是乙個文法,s是文法的開始符號,假定abd是文法g的乙個句型其中α,β,d∈(vn∪vt)*,a∈vn ,如果有
則b稱是句型abd相對於非終結符a的短語。
2)直接短語
特別是,如果有aþb,則稱b是句型abd相對於規則a® b的直接短語。
3)控制代碼
乙個句型的最左直接短語稱為該句型的控制代碼。
定義:假定a是文法g的乙個句子,我們稱序列
an, an-1,¼ ,a0
是a的乙個規範歸約,如果此序列滿足:
(1) an= a
(2) a0為文法的開始符號,即a0=s
(3) 對任何i,0 < i £ n, ai-1是從ai經把控制代碼替換成為相應產生式左部符號而得到的。
三.修建語法樹
(1)子樹:是由該樹的某個結點(子樹的根)連同它的所有子孫組成。
(2)簡單子樹:只有單層分支的子樹(只有父子兩代沒有第三代)
(3) 對語法樹有如下結論
①每個句型都有一棵語法樹與之對應
②每棵語法樹的葉結點自左至右排列就組成乙個句型
③每棵子樹的葉結點自左至右排列就組成乙個短語
④每棵簡單子樹的葉結點自左至右排列就組成乙個直接短語
⑤每棵最左簡單子樹的葉結點自左至右排列就組成乙個控制代碼
四.演算法優先分析法
(1)算符文法
乙個文法,如果它的任一產生式的右部都不含兩個相繼(並列)的非終結符,即不含如下形式的產生式右部:
…qr…
則我們稱該文法為算符文法,也稱og文法
((1)算符文法
乙個文法,如果它的任一產生式的右部都不含兩個相繼(並列)的非終結符
2.構造算符優先關係表
(1)通過檢查產生式的每乙個候選式可以找出滿足a=.b
(即p→…ab…或p→…aqb…的產生式)
(2)為了滿足<.>
(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 移進歸約 1 基本思想 用乙個寄存符號的先進後出棧,把輸入符號乙個乙個地移進到棧裡,當棧頂形成某個產生式的候選式時,即把棧頂的這一部分替換成 歸約為 該產生式的左部符號。2 歸約 是指根據文法的產生式規則,把產生式的右部替換成左部符號。自下而上分析過程 邊輸入單詞符號,邊歸約。核心問題 識別可歸...
第五章 自下而上分析
一 知識點 自下而上分析法是從輸入串開始,逐步進行 規約 直至規約到文法的開始符號 或者說,從語法樹的末端開始,步步向上 規約 直至根結。歸約 1 短語 令g是乙個文法,s是文法的開始符號,假定 是文法g的乙個句型,如果有s a 且s 則稱 是句型 相對於非終結符的短語。2 直接短語 特別是,如果有...