一:LR(0),SLR(1),規范LR(1),LALR(1)的關系
首先LL(1)分析法是自上而下的分析法。LR(0),LR(1),SLR(1),LALR(1)是自下而上的分析法。
自上而下:從開始符號出發,根據產生式規則推導給定的句子。用的是推導
自下而上:從給定的句子規約到文法的開始符號。用的是歸約
1: SLR(1)與LR(0)的關系:
SLR(1)與LR(0):簡單的LR語法分析技術(即SLR(1)分析技術)的中心思想是根據文法構造出LR(0)自動機。
LR(0):見到First集就移進,見到終態就歸約
SLR(1)見到First集就移進,見到終態先看Follow集,與Follow集對應的項目歸約,其它報錯。
2: LR(1)與LR(0)的關系:
規范LR(1)語法分析技術的中心思想是根據文法構造出LR(1)自動機 ,而規范LR(1)自動機構造方法和LR(0)自動機的構造方法相同,只是多增加了向前搜索符號。
3:規范LR(1)與LALR(1)的關系:
LALR(1)是對LR(1)項集族I中具有同心項的項集進行合並得到I',然后根據I’進行分析的方法。
二:LL(1),SLR(1),規范LR(1),LALR(1)的判別
1:LL(1)判斷規則
判定規則: 龍書上有很明確的規則,龍書上這樣說, 對形如 A->a|β 這樣的文法,滿 足
①FIRST(α)∩ FIRST (β ) =Φ
②若ε∈ FIRST( α), 要滿足 FIRST(β) ∩FOLLOW(A)=Φ
這兩個條件的才是 LL(1) 文法。
這里要注意一下條件②, α和 β 是可以互換的,意思就是只要其中有一個 FIRST 集包含ε,那么就要看另一個了。
2:SLR(1)判斷規則
方法一:畫出文法的LR(0)自動機,如果沒有移進--規約沖突,即shift--reduce 沖突,則該文法是SLR(1)文法
3:LALR(1)和LR(1)的判斷規則
畫出文法的LR(1)自動機,如果沒有同心項且沒有狀態沖突,則該文法是LALR(1)文法;如果有同心項且合並同心項有狀態沖突,則是LR(1)文法
原文地址鏈接:http://www.cnblogs.com/Alexkk/p/6033159.html
最后附上我們sysu編譯原理作業的兩個例子
一, 證明下列文法
S à Aa | bAc | dc | bda
A à d
是LALR(1)文法但不是SLR(1)文法.
拓廣文法
(0) S’→S
(1) S → Aa
(2) S → bAc
(3) S → dc
(4) S → bda
(5) A → d
拓廣文法的LR(1)項目集規范族及Go函數如下
一、 證明下列文法
S à Aa | bAc | Bc | bBa
A à d
B à d
是LR(1)文法但不是LALR(1)文法.
拓廣文法
(0) S’→S
(1) S → Aa
(2) S → bAc
(3) S → Bc
(4) S → bBa
(5) A → d
(6) B → d
拓廣文法的LR(1)項目集規范族及Go函數如下