在生成的決議函式中,我們使用一種演算法,該演算法查看令牌串列并根據當前的非終端FIRST集選擇規則(替代)。如果它包含一個 epsilon(規則可以為空),也會檢查FOLLOW集。
考慮以下語法 [not LL(1)]:
B : A term
A : N1 | N2
N1 :
N2 :
在計算程序中,FOLLOW集終端term將傳播A到N1和N2,因此FOLLOW集不會幫助我們做出決定。
另一方面,如果恰好有一個可為空的替代方案,我們肯定知道如何繼續執行,即使當前令牌與FIRST集合中的任何內容都不匹配(通過選擇 epsilon 產生式)。
如果以上陳述為真,則FOLLOW集是多余的。是否僅用于錯誤處理?
uj5u.com熱心網友回復:
是的,沒有必要。
我在討論會上被問到這個問題,我的回答是使用了FOLLOW集
- 檢查語法是否為 LL(1)
- 發生錯誤時立即失敗,而不是將格式錯誤的令牌拖到稍后的生產中,在那里生成的失敗訊息可能不清楚
- 不為別的
被接受
uj5u.com熱心網友回復:
雖然您當然可以找到不需要 FOLLOW 的語法(即,它在決議表的計算中不起作用),但通常是必要的。
例如,考慮語法
S : A | C
A : B a
B : b | epsilon
C : D c
D : d | epsilon
你需要知道
Follow(B) = {a}
Follow(D) = {c}
計算
First(A) = {b, a}
First(C) = {d, c}
為了在 S 處做出正確的選擇。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/373185.html
