设有文法G[A] A→BCc|gDB B→bCDE|ε C→DaB|ca D→dD|ε E→gAf|c 计算该文法的每一个非终结符的FIRST集和FOLLOW集,并给出详细的解释和计算过程
时间: 2023-12-07 16:02:23 浏览: 234
这个问题是一个关于文法的问题,因此是IT类问题。下面给出该文法的每一个非终结符的FIRST集和FOLLOW集的计算过程。
首先计算非终结符B、C、D、E的FIRST集:
- FIRST(B)
B → bCDE | ε
FIRST(bCDE) = { b }
FIRST(ε) = { ε }
B的FIRST集为 { b, ε }
- FIRST(C)
C → DaB | ca
FIRST(DaB) = FIRST(D) ∪ { c }
FIRST(ca) = { c, a }
C的FIRST集为 { c, a, d, ε }
- FIRST(D)
D → dD | ε
FIRST(dD) = { d }
FIRST(ε) = { ε }
D的FIRST集为 { d, ε }
- FIRST(E)
E → gAf | c
FIRST(gAf) = { g }
FIRST(c) = { c }
E的FIRST集为 { g, c }
接下来计算非终结符A的FOLLOW集:
- FOLLOW(A)
A → BCc | gDB
FOLLOW(A) = { $ }
- FOLLOW(B)
B → bCDE | ε
FOLLOW(B) = FIRST(C) ∪ FOLLOW(A)
= { c, a, d, ε, $ }
- FOLLOW(C)
C → DaB | ca
FOLLOW(C) = FIRST(cA) ∪ FOLLOW(B)
= { g, c, a, b, d, ε, $ }
- FOLLOW(D)
D → dD | ε
FOLLOW(D) = FIRST(E) ∪ FOLLOW(C)
= { g, c, a, b, d, ε, $ }
- FOLLOW(E)
E → gAf | c
FOLLOW(E) = FOLLOW(D)
= { g, c, a, b, d, ε, $ }
最后,得到每一个非终结符的FIRST集和FOLLOW集:
- FIRST(A) = { b, c, a, d, g, ε }
- FIRST(B) = { b, ε }
- FIRST(C) = { c, a, d, ε }
- FIRST(D) = { d, ε }
- FIRST(E) = { g, c }
- FOLLOW(A) = { $ }
- FOLLOW(B) = { c, a, d, ε, $ }
- FOLLOW(C) = { g, c, a, b, d, ε, $ }
- FOLLOW(D) = { g, c, a, b, d, ε, $ }
- FOLLOW(E) = { g, c, a, b, d, ε, $ }
阅读全文