LL(1),LR(0),SLR(1),LALR(1),LR(1)

LL(k)文法

LL(1)

為什么需要FIrst和Follow,以及如何根據(jù)First與Follow生成預(yù)測(cè)分析表

步驟

首先生成First,再結(jié)合First生成Follow, 最后根據(jù)First與Follow生成預(yù)測(cè)分析表

LL(1),LR(0),SLR(1),LALR(1),LR(1)對(duì)比

http://blog.csdn.net/linraise/article/details/9237195

LR(0)的介紹

從左分析,從棧頂歸約,

LR(0) -> SLR的必要性

對(duì)于LR(0),由于分析中一遇到終態(tài)就歸約,一遇到First集就移進(jìn),如果有一下狀態(tài)I1,I1包含兩個(gè)語(yǔ)法:
F->Y·+
F->Y·
那LR(0)就無(wú)法確定到底是移進(jìn)還是歸約了。
這就是為什么我們要引入SLR解決reduce-shift conflict(盡管不能完全解決該問(wèn)題).

SLR的介紹

如果不僅考慮First,而且把Follow集也考慮在內(nèi),就可以一定程度上解決reduce-shift conflict.
還是以上語(yǔ)法:
F->Y·+B
F->Y·
如果FOLLOW(F) = {a, b},那么當(dāng)我們遇到a與b時(shí),就可以選擇歸約F;當(dāng)我們遇到+時(shí),就可以選擇移進(jìn)操作。

SLR -> LR(1)的必要性

SLR不能完全解決reduce-shift confict.
同樣還是上面的語(yǔ)法:
F->Y·+B
F->Y·
如果 FOLLOW(F) = {a, b, +},那當(dāng)我們遇到 + 符號(hào)時(shí),就無(wú)法確定到底是選擇移進(jìn)操作得到F->Y+·B,還是歸約F。
SLR不能完全解決reduce-shift conflict. 這就是為什么我們要選擇LR(1) / LALR(1)了

LR(1)的介紹

https://parasol.tamu.edu/~rwerger/Courses/434/lec10.pdf

LALR table 構(gòu)造

關(guān)鍵

合并同心集


合并前

合并后

構(gòu)造方法: 見中文第二版P.169下方[算法 4.56]

reduce-shift reduce 移進(jìn)-歸約沖突

LR(0)不能解決移進(jìn)-歸約沖突(不知道該移進(jìn)還是歸約)

SLR

寫出First、Follow,并得出LR(0)

根據(jù)中文版P.161畫出SLR table.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容