【編譯原理】第6章 自下而上的語法分析——LR分析

6 自下而上的語法分析——LR分析


一、LR分析器

在這裏插入圖片描述在這裏插入圖片描述
分析表的組成
在這裏插入圖片描述在這裏插入圖片描述
LR分析過程
在這裏插入圖片描述
在這裏插入圖片描述
自底向上分析法的關鍵問題是在分析過程中如何確定句柄。
LR方法中的句柄是通過求可歸前綴而求得。

二、可歸前綴與活前綴

在這裏插入圖片描述  在這裏插入圖片描述
規範句型的這種前部分符號串稱爲可歸前綴
我們把形成可歸前綴之前包括可歸前綴在內的所有規範句型的前綴都稱爲活前綴

在這裏插入圖片描述
活前綴
在這裏插入圖片描述
LR分析需要構造識別活前綴的有窮自動機

  • 可以文法的終結符和非終結符都看成有窮自動機的輸入符號,每次把一個符號進棧看成已識別過了該符號,同時狀態進行轉換,當識別到可歸前綴時,相當於在棧中形成句柄,認爲達到了識別句柄的終態。
    在這裏插入圖片描述

三、構造識別活前綴的有窮自動機

1、 已有活前綴構造有限自動機

在這裏插入圖片描述

2、 活前綴及其可歸前綴的一般計算方法

在這裏插入圖片描述
在這裏插入圖片描述

3、 項目形式

由文法的產生式直接構造識別活前綴和可歸前綴的有限自動機
項目:在每個產生式的右部適當位置添加一個圓點構成項目
在這裏插入圖片描述
項目分類
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述 在這裏插入圖片描述
構成識別一個文法活前綴的DFADFA 項目集(狀態)的全體稱爲這個文法的LR(0)項目集規範族
NFA確定化爲DFA的工作量較大,我們考慮直接構造出項目集作爲DFA的狀態,就可直接構造DFA
通過閉包函數(CLOSURE)來求DFA一個狀態的項目集
在這裏插入圖片描述
一個項目集可能包含多種項目
a) 移進和歸約項目同時存在。 移進-歸約衝突
b) 歸約和歸約項目同時存在。 歸約-歸約衝突

LR(0)文法:若其LR(0)項目集規範族不存在移進-歸約,或歸約-歸約衝突,稱爲LR(0)文法。
在這裏插入圖片描述
圓點不在產生式右部最左邊的項目稱爲,唯一的例外是SSS’→ • S。因此用GOTOIXGOTO(I,X)轉換函數得到的J爲轉向後狀態所含項目集的核

使用閉包函數(CLOSURECLOSURE)和轉向函數(GOTO(I,X)GOTO(I,X))構造文法GG’LR(0)LR(0)的項目集規範族,步驟如下:
a)置項目SSS’→ • S爲初態集的核,然後對核求閉包CLOSURESSCLOSURE({S’→ • S})得到初態的項目集
b)對初態集或其它所構造的項目集應用轉換函數GOTO(IX)=CLOSURE(J)GOTO(I,X)= CLOSURE(J)求出新狀態J的項目集
c)重複b)直到不出現新的項目集爲止
在這裏插入圖片描述


LR分析器的構造
①構造識別文法活前綴的確定有限自動機
②根據該自動機構造相應的分析表(ACTION表、GOTO表)
在這裏插入圖片描述


總結:構造識別文法活前綴DFA的三種方法

  • 根據形式定義求出活前綴的正規表達式,然後由此正規表達式構造NFANFA再確定化爲DFADFA
  • 求出文法的所有項目,按一定規則構造識別活前綴的NFANFA再確定化爲DFADFA
  • 使用閉包函數(CLOSURECLOSURE)和轉向函數(GOTO(I,X)GOTO(I,X))構造文法GG’LR(0)LR(0)的項目集規範族,再由轉換函數建立狀態之間的連接關係得到識別活前綴的DFADFA

bingo~   ✨ 耐心和持久勝過激烈和狂熱。不管環境變換到何種地步,只有初衷與希望永不改變的人,才能最終克服困難,達到目的。

——《海底兩萬裏》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章