省略號代表其他相關產生式得出的終結符號,一開始的時候,省略號里面是沒有的
求FIRST集
情況壹 如果A只在→的右邊出現,那么FIRST(A)={A},例子M→α,FIRST(α)={α}
情況貳 對於A→BCDEFG,
一 如果無B→ε,那么FIRST(A)={……}∪FIRST(B),接着求FIRST(B)
二 如果有B→ε,那么FIRST(A)={……}∪(FIRST(B)-{ε})∪FIRST(CDEFG),接着分別求FIRST(B)-{ε}、FIRST(CDEFG)
情況叄 如果G→ε,那么FIRST(G)={……}∪{ε}
求FOLLOW集
情況壹 如果S是開始符號(一般是第一個產生式),那么FOLLOW(S)={……,$}
情況貳 一 如果有產生式A→αBCD,且ε不屬於FIRST(CD)那么FOLLOW(B)={……}∪(FIRST(CD))
二 如果有產生式A→γBCD,且ε屬於FIRST(CD)那么FOLLOW(B)={……}∪(FIRST(CD)-{ε})∪FOLLOW(A)
情況叄 如果有產生式M→CDB,那么FOLLOW(B)={……}∪FOLLOW(M)
例子
對於文法G[A]
A→BCc|gDB
B→bCDE|ε
C→DaB|ca
D→dD|ε
E→gAf|c
FIRST集先看→左邊
FIRST(A)=FIRST(BCc)∪FISRT(gDB)
=(FIRST(B)-{ε})∪FIRST(Cc)∪{g}
={b}∪FIRST(DaBc)∪FIRST(cac)∪{g}
={b}∪FIRST(dDaBc)∪FIRST(aBc)∪{c}∪{g}
={b,d,a,c,g}
FIRST(B)=FIRST(bCDE)∪FIRST(ε)
={b,ε}
FIRST(C)=FIRST(DaB)∪FIRST(ca)
=FIRST(dDaB)∪FIRST(aB)∪{c} 相當於(FIRST(D)-{ε})∪FIRST(aB)∪{c}
={d,a,c}
FIRST(D)=FIRST(dD)∪FIRST(ε)
={d,ε}
FIRST(E)=FIRST(gAf)∪FIRST(c)={g,c}
-------------------------------------------------------------------------------------------------------
FOLLOW集先看→右邊
FOLLOW(A)={$}∪{f}={f,$}
FOLLOW(B)=FIRST(Cc)∪FOLLOW(A)∪FOLLOW(C)
={d,a,c}∪{f,$}∪FOLLOW(C)先去求FOLLOW(C)再來補
={a,c,d,g,f,$}
FOLLOW(C)={c}∪FIRST(DE)
={c}∪{d}∪FIRST(E)
={c,d,g}
FOLLOW(D)=(FIRST(B)-{ε})∪FOLLOW(A)∪FIRST(E)∪{a}∪FOLLOW(D)
={b}∪{f,$}∪{g,c}∪{a}
={a,b,g,c,f,$}
FOLLOW(E)=FOLLOW(B)={a,c,d,g,f,$}