【正文】
改進(jìn)的 SLR(1)分析表的 ACTION表和 GOTO表的 構(gòu)造步驟 : a) 若項(xiàng)目 A→ ? ? a?屬于 Ik,且轉(zhuǎn)換函數(shù) GO(Ik,a)= Ij ,當(dāng)a為終結(jié)符時(shí),則置 ACTION[k,a]為 Sj b) 若項(xiàng)目 A→ ? ?屬于 Ik ,則對(duì) a為任何終結(jié)符或‘ ’, 且滿足 a?FOLLOW(A)時(shí) ,置 ACTION[k,a] = rj , j為產(chǎn)生式在文法 G‘中的編號(hào) c) 若 GO(Ik,A)= Ij ,則置 GOTO[k,A]=j,其中 A為非終結(jié)符, j為某一狀態(tài)號(hào) d) 若項(xiàng)目 S‘→ S ?屬于 Ik ,則置 ACTION[k,] = acc e) 其它填上 “報(bào)錯(cuò)標(biāo)志” 的資料庫(kù)下載 ? 仍有許多文法構(gòu)造的 LR(0)項(xiàng)目集規(guī)范族存在的動(dòng)作沖突不能用 SLR(1)方法解決 的資料庫(kù)下載 LR(1)分析 ? 若項(xiàng)目集 [A→ ??B?]屬于 I時(shí),則 [B→ ??]也屬于 I ? 把 FIRST(?)作為用產(chǎn)生式歸約的搜索符(稱為向前搜索符),作為用產(chǎn)生式 B→ ?歸約時(shí)查看的符號(hào)集合(用以代替 SLR(1)分析中的FOLLOW集),并把此搜索符號(hào)的集合也放在相應(yīng)項(xiàng)目的后面,這種處理方法即為 LR(1)方法 的資料庫(kù)下載 LR(1)項(xiàng)目集族的構(gòu)造:針對(duì)初始項(xiàng)目 S’→ ?S,求閉包后再用轉(zhuǎn)換函數(shù)逐步求出整個(gè)文法的 LR(1)項(xiàng)目集族。 SLR(1)分析表 A C T I O N GOTO狀態(tài)r , i S D0 S211 a c c2 S433 S 5 r 14 r3r3r3r35 S 66 r2r2r2r2的資料庫(kù)下載 一個(gè) LR(0)規(guī)范族中含有如下的項(xiàng)目集(狀態(tài)) I I = {X → ? ? b? , A → ? ? , B → ? ? } 若有: FOLLOW(A) ∩FOLLOW(B) = 216。因此用 GOTO( I, X)轉(zhuǎn)換函數(shù) 得到的 J為轉(zhuǎn)向后狀態(tài)所含項(xiàng)目集的 核 使用閉包函數(shù)( CLOSURE)和轉(zhuǎn)向函數(shù) (GOTO(I,X))構(gòu)造文法 G’的 LR(0)的 項(xiàng)目集規(guī)范族 ,步驟如下: a)置項(xiàng)目 S’→ ? S為初態(tài)集的核,然后對(duì)核求閉包CLOSURE( {S’→ ? S})得到初態(tài)的 項(xiàng)目集 b)對(duì)初態(tài)集或其它所構(gòu)造的項(xiàng)目集應(yīng)用轉(zhuǎn)換函數(shù)GOTO(I, X)= CLOSURE(J)求出新?tīng)顟B(tài) J的項(xiàng)目集 c)重復(fù) b)直到不出現(xiàn)新的項(xiàng)目集為止 的資料庫(kù)下載 S’ ? . E E ? . T E ? .T + E T ? .(E) T ? .int * T T ? .int S’ ? E . E ? T. E ? T. + E T ? int. * T T ? int. T ? (. E) E ? .T E ? .T + E T ? .(E) T ? .int * T T ? .int E ? T + E. E ? T + . E E ? .T E ? .T + E T ? .(E) T ? .int * T T ? .int T ? int * .T T ? .(E) T ? .int * T T ? .int T ? int * T. T ? (E.) T ? (E). E T ( int int * ) E E T int ( ( int T + ( T 的資料庫(kù)下載 總結(jié):構(gòu)造識(shí)別文法活前綴 DFA的三種方法 一、根據(jù)形式定義求出活前綴的正規(guī)表達(dá)式,然后由此正規(guī)表達(dá)式構(gòu)造 NFA再確定化為 DFA 二、求出文法的所有項(xiàng)目,按一定規(guī)則構(gòu)造識(shí)別活前綴的 NFA再確定化為 DFA 三、 使用閉包函數(shù)( CLOSURE)和轉(zhuǎn)向函數(shù)(GOTO(I,X))構(gòu)造文法 G’的 LR(0)的 項(xiàng)目集規(guī)范族,再由轉(zhuǎn)換函數(shù)建立狀態(tài)之間的連接關(guān)系得到識(shí)別活前綴的 DFA 的資料庫(kù)下載 LR( 0)項(xiàng)目集規(guī)范族的項(xiàng)目類型分為如下四種: 1)移進(jìn)項(xiàng)目 A → ? ? a? 2)待約項(xiàng)目 A → ? ? B? 3)歸約項(xiàng)目 A → ? ? 4)接受項(xiàng)目 S‘ → S ? 一個(gè)項(xiàng)目集可能包含多種項(xiàng)目 a) 移進(jìn)和歸約項(xiàng)目同時(shí)存在。 R?*R?的資料庫(kù)下載 ? LR分析需要構(gòu)造識(shí)別 活前綴 的 有窮自動(dòng)機(jī) –我們可以文法的終結(jié)符和非終結(jié)符都看成有窮自動(dòng)機(jī)的輸入符號(hào),每次把一個(gè)符號(hào)進(jìn)??闯梢炎R(shí)別過(guò)了該符號(hào),同時(shí)狀態(tài)進(jìn)行轉(zhuǎn)換,當(dāng)識(shí)別到可歸前綴時(shí),相當(dāng)于在棧中形成句柄,認(rèn)為達(dá)到了識(shí)別句柄的終態(tài)。 的資料庫(kù)下載 步驟 符號(hào)棧 輸入符號(hào)串 動(dòng)作 1) abbcde 移進(jìn) 0 S2 2) a bbcde 移進(jìn) 02 S4 4) aA bcde 移進(jìn) 023 S6 6) aA cde 移進(jìn) 023 S5 7) aAc de 移進(jìn) 0235 S8 9) aAcB e 移進(jìn) 02357 S9 11) S 接受 01 acc 對(duì)輸入串 abbcde的 LR分析過(guò)程 3) ab bcde 歸約 (A→ b) 024 r2 3 5) aAb cde 歸約 (A→ Ab) 0236 r3 3 8) aAcd e 歸約 (B→ d) 02358 r4 7 10) aAcBe 歸約 (S→ aAcBe) 023579 r1 1 狀態(tài)棧 ACTION GOTO 0 1 4 2 3 5 7 6 9 S a b A b c B e d 8 ? * 的資料庫(kù)下載 步驟 符號(hào)棧 輸入符號(hào)串 動(dòng)作 1) abbcde 移進(jìn) 0 S2 對(duì)輸入串 abbcde的 LR分析過(guò)程 狀態(tài)棧 ACTION GOTO 0 1 4 2 3 5 7 6 9 S a b A b c B e d 8 ? * 的資料庫(kù)下載 步驟 符號(hào)棧 輸入符號(hào)串 動(dòng)作 1) abbcde 移進(jìn) 0 S2 2) a bbcde 移進(jìn) 02 S4 對(duì)輸入串 abbcde的 LR分析過(guò)程 狀態(tài)棧 ACTION GOTO 0 1 4 2 3 5 7 6 9 S a b A b c B e d 8 ? * 的資料庫(kù)下載 步驟 符號(hào)棧 輸入符號(hào)串 動(dòng)作 1) abbcde 移進(jìn) 0 S2 2) a bbcde 移進(jìn) 02 S4 對(duì)輸入串 abbcde的 LR分析過(guò)程 3) ab bcde 歸約 (A→ b) 024 r2 3 狀態(tài)棧 ACTION GOTO 0 1 4 2 3 5 7 6 9 S a b A b c B e d 8 ? * 的資料庫(kù)下載 步驟 符號(hào)棧 輸入符號(hào)串 動(dòng)作 1) abbcde 移進(jìn) 0 S2 2) a bbcde 移進(jìn) 02 S4 4) aA bcde 移進(jìn) 023 S6 對(duì)輸入串 abbcde的 LR分析過(guò)程 3) ab bcde 歸約 (A→ b) 024 r2 3 狀態(tài)棧 ACTION GOTO 0 1 4 2 3 5 7 6 9 S a b A b c B e d 8 ? * 的資料庫(kù)下載 步驟 符號(hào)棧 輸入符號(hào)串 動(dòng)作 1) abbcde 移進(jìn) 0 S2 2) a bbcde 移進(jìn) 02 S4 4) aA bcde 移進(jìn) 023 S6 對(duì)輸入串 abbcde的 LR分析過(guò)程 3) ab bcde 歸約 (A→ b) 024 r2 3 5) aAb cde 歸約 (A→ Ab) 0236 r3 3 狀態(tài)棧 ACTION GOTO 0 1 4 2 3 5 7 6 9 S a b A b c B e d 8 ? * 的資料庫(kù)下載 步驟 符號(hào)棧 輸入符號(hào)串 動(dòng)作 1) abbcde 移進(jìn) 0 S2 2) a bbcde 移進(jìn) 02 S4 4) aA bcde 移進(jìn) 023 S6 6) aA cde 移進(jìn)