一:知識點
自下而上分析法是從輸入串開始,逐步進行」規約「,直至規約到文法的開始符號;或者說,從語法樹的末端開始,步步向上」規約「,直至根結。
歸約
1、短語:令g是乙個文法,s是文法的開始符號,假定αβδ是文法g的乙個句型,如果有s=*>αaδ,且s=+>β,則稱β是句型αβδ相對於非終結符的短語。
2、直接短語:特別是,如果有a=>β,則稱β是句型αβδ相對於規則的a->β的直接短語。
3、控制代碼:乙個句型的最左直接短語稱為該句型的控制代碼。
4、規範歸約:假定α是文法g的乙個句子,我們稱序列αn,αn-1,......,α0是α的乙個規範歸約,如果此序列滿足(1)α0=α;(2)α0為文法的開始符,即α0=s;(3)對任何i,0算符優先分析
1、優先順序關係:兩個相繼出現的終結符a和b(他們之間可能插有乙個非終結符)的優先關係可能有三種:
①、ab(a的優先順序高於b)【誰在前優先順序低】
注意:aa,a=•b也不一定意味著b=•a。
2、算符文法:乙個文法,如果它的任一產生式的右部都不含有兩個相繼(並列)的非終結符,即不含如下形式的產生式右部:...qr...,則我們稱該文法為算符文法。
3、算符優先文法:如果乙個算符文法g中的任何終結符對(a,b)至多只滿足三種優先順序關係之一,則稱g為算符優先文法。
4、最左素短語:素短語是至少包含乙個終結符,並且,除它自身之外不再含任何更小的素短語。那麼最左素短語是指處於句型最左邊的那個素短語。
lr分析法
lr分析方法是一種自下而上的分析方法
lr分析法的歸約過程是規範推導的逆過程,所以lr分析過程是一種規範歸約過程
lr分析方法是一種適用於一大類上下文無關文法的分析方法
比較複雜,不適於用手工實現,可借助於yacc/bison實現
根據歸約過程中向前看輸入符號串中字元的個數,定義不同的lr(k)分析方法,通常,k=0,1
lr文法
乙個文法,如果能構造出乙個所有條目都唯一的分析表。
lr(k)文法
最多向前看k個的符號就可以決定動作的lr分析器所分析的文法成為lr(k)文法。
我們最感興趣的是k=0,1
活字首特點:
該字首加上被分析串中未被分析的終結符,就可以構成乙個規範句型
只要輸入串的已掃瞄部分可歸約成乙個活字首,意味著掃瞄過的部分沒有錯誤
二、lr(0)專案集規範族的構造
1.構造g的拓廣文法g』
設s為文法g的開始符號,構造乙個文法g』,它包含整個文法g,並且引進了乙個不出現在g中的非終結符s,並加進乙個新產生式s→s,這個s是g的開始符號。把g』成為g的拓廣文法。(有乙個僅含專案s→s. 的狀態,這就是唯一的「接受」狀態)
2.lr(0)分析表的action和goto表的構造步驟
a)若專案a→•a屬於ik,且轉換函式go(ik,a)=ij,當a為終結符時 ,則置action[k,a]為sj。
b)若專案a→•屬於ik, 則對a為任何終結符或#′,置action[k,a]=rj, j為產生式在文法g′中的編號。
c)若go(ik,a)=ij,則置goto[k,a]=j,其中a為非終結符,j為某一狀態號。
d)若專案s′→s•屬於ik,則置action[k,#]= acc。
e)其它填上「報錯標誌」。
lr(0)
slr(1):生成的lr(0)專案集如有衝突,則根據非終結符的follow集決定。
lr(1)、lr(k):專案由心與向前搜尋符組成,搜尋符長度為1或k。
lalr(1):對lr(1)專案集規範族合併同心集。
二,習題
第五章 自下而上分析
一 自下而上分析基本問題 1 歸約 其實就是上一章自上而下的分析的逆向 定義 是指根據文法的產生式規則,把產生式的右部替換成左部符號。2 規範規約 推出了短語 直接短語 控制代碼的概念。乙個句型的最左直接短語稱為該句型的控制代碼。規範歸約 最左規約 是關於是乙個最右推導 規範推導 的逆過程。由於規範...
第五章 自下而上分析
1 移進歸約 1 基本思想 用乙個寄存符號的先進後出棧,把輸入符號乙個乙個地移進到棧裡,當棧頂形成某個產生式的候選式時,即把棧頂的這一部分替換成 歸約為 該產生式的左部符號。2 歸約 是指根據文法的產生式規則,把產生式的右部替換成左部符號。自下而上分析過程 邊輸入單詞符號,邊歸約。核心問題 識別可歸...
編譯原理 第五章 自下而上分析
一.移進規約 1.基本思想 用乙個寄存符號的先進後出棧,把輸入符號乙個乙個地移進到棧裡,當棧頂形成某個產生式的候選式時,即把棧頂的這一部分替 換成 歸約為 該產生式的左部符號。2.規約 是指根據文法的產生式規則,把產生式的右部替換成左部符號。二.規範規約 1 短語 定義 令g是乙個文法,s是文法的開...