計算first集和follow集合

純屬瞎寫借鑒,我覺得很好懂,給那些不懂的人看

計算FIRST集:
① 根據(jù)定義計算:
 對每一文法符號X∈V 計算FIRST(X)
(a) 若X∈VT,則FIRST(X)={X}
(b) 若X∈VN,且有產(chǎn)生式X→a…,a∈VT, 則 a∈FIRST(X)
(c) 若X∈VN,X→ε,則ε∈FIRST(X)
(d) 若X, Y1,Y2,…,Yn都∈VN,且有產(chǎn)生式X→Y1 Y2 …
 Yn;當Y1 Y2 … Yi-1都ε時,(其中1≤i≤n),則FIRST(Y1)-
{ε}、FIRST(Y2) -{ε} 、…、FIRST(Yi-1)- {ε},F(xiàn)IRST(Yi)
 都包含在FIRST(X)中
(e) 當(d)中所有Yi   ε,(i=1,2,…n),則
 FIRST(X)=FIRST(Y1)∪FIRST(Y2)∪…∪FIRST(Yn)∪{ε}
(f)反復(fù)使用上述(b)~(e)步直到每個符號的FIRST集合不再增
 大為止
② 由關(guān)系圖法求文法符號的FIRST集:
(a)每個文法符號對應(yīng)圖中一個結(jié)點,對應(yīng)終結(jié)符的結(jié)點時用
 符號本身標記,對應(yīng)非終結(jié)符的結(jié)點用FIRST(A)標記。這
 里A表示非終結(jié)符
(b)如果文法中有產(chǎn)生式A→αXβ,且α  ε,則從對應(yīng)A的
結(jié)點到對應(yīng)X的結(jié)點連一條箭弧
(c)凡是從FIRST(A)結(jié)點有路徑可到達的終結(jié)符結(jié)點所標記的
 終結(jié)符都為FIRST(A)的成員
(d)由判別步驟1)確定ε是否為某非終結(jié)符FIRST集的成員,
 若是則將ε加入該非終結(jié)符的FIRST集中


這里寫圖片描述
這里寫圖片描述

3)計算FOLLOW集:
① 根據(jù)定義計算:
  對文法中每一 A∈VN 計算 FOLLOW(A)
(a)設(shè)S為文法中開始符號,把{#}加入FOLLOW(S)中(這里“#”為句子括號)
(b)若A→αBβ是一個產(chǎn)生式,則把FIRST(β)的非空元素加入
 FOLLOW(B)中。
 如果β  ε則把FOLLOW(A)也加入FOLLOW(B)中
(c)反復(fù)使用(b)直到每個非終結(jié)符的FOLLOW集不再增大為止

② 由關(guān)系圖法求非終結(jié)符的FOLLOW集:
(a)文法G中的每個符號和“#”對應(yīng)圖中的一個結(jié)點,對應(yīng)終結(jié)符和“#”的結(jié)點用符號本身標記。對應(yīng)非終結(jié)符的結(jié)點(如A∈VN)則用FOLLOW(A)或FIRST(A)標記
(b)從開始符號S的FOLLOW(S)結(jié)點到“#”號的結(jié)點連一條箭弧
(c)如果文法中有產(chǎn)生式A→αBβX,且β  ε,則從
FOLLOW(B)結(jié)點到FIRST(X)結(jié)點連一條弧,當X∈VT時,則
與X相連
(d) 如果文法中有產(chǎn)生式A→αBβ,且β  ε,則從
FOLLOW(B)結(jié)點到FOLLOW(A)結(jié)點連一條箭弧
(e) 對每一FIRST(A)結(jié)點如果有產(chǎn)生式A→αXβ,且
α  ε, 則從FIRST(A)到FIRST(X)連一條箭弧
(f)凡是從FOLLOW(A)結(jié)點有路徑可以到達的終結(jié)符或“#”號的結(jié)點,其所標記的終結(jié)符或"#"號即為FOLLOW(A)的成員


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

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

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