在很多地方(例如在這個答案中),我已經
LR(0) 項的規范集合
在上面的 DFA 中,我發現沒有任何狀態存在 shift-reduce 沖突或 reduce-reduce 沖突。
所以根據我的分析,這個語法應該是 LR(0)。但它也有ε產生。
這個例子是不是與陳述相矛盾:
“沒有 ε 產生式的語法可以是 LR(0)”
我想如果我知道上面參考的陳述句背后的邏輯,那么我可以更好地理解這個概念。
實際上,我的主要問題在于宣告:
ε 自由 LL(1) 文法也是 SLR(1)。
當我問我的一個朋友時,他給出的論點是,由于 LL(1) 語法是 ε 自由的,因此它是 LR(0),因此它是 SLR(1)。
但我也無法理解他的邏輯。當我問他關于推理的問題時,他開始分享關于“ε 產生式的語法永遠不能是 LR(0)”的帖子......
但就我個人而言,我想不出任何關于“ε free LL(1) 語法是 SLR(1)”的邏輯。它真的與“具有ε產生的語法不能是LR(0)”的上述屬性有關嗎?如果是這樣,請幫幫我。如果不是,那么我是否應該考慮針對第二個困惑提出一個單獨的問題?
我的編譯器設計概念僅來自 Ullman 的龍書。還有來自 Ullman 的 TOC 知識以及來自 Sipser、Linz 等少數其他文本的知識。
uj5u.com熱心網友回復:
你的語法的一個顯著特點是A可以被消除。它完全沒有任何目的。(通過“消除”,我的意思是簡單地洗掉對它的所有參考;保持產品完好無損。)
確實,它的存在并不排除語法為 LR(0)。類似地,具有不可到達的非終結符和該非終結符的 ε-產生式的文法也可以是 LR(0)。
因此,如果一個文法具有一個生產性非終結符,同時具有 ε-產生式和其他一些生產性產生式,則更準確地說,它不能是 LR(0) 。但由于我們通常只考慮沒有無意義的非終結符的簡化語法,我不確定這種額外的迂腐是否有多大用處。
至于你關于 ε-free LL(1) 語法的問題,這里有一個粗略的大綱:
如果 ε-free 文法不是 LR(0),則存在某種狀態同時具有移位和歸約動作。由于語法是 ε-free 的,因此通過 shift 或 goto 達到該狀態。先前的狀態必須有兩個不同的產生式具有相同的 FIRST 集,這與 LL(1) 條件相矛盾。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/416620.html
標籤:
