已知文法 G[S]: S→AB|a A→D|bEA B→ESo|ε D→dAE|c E→eBc (1)计算 G[S]中各个非终结符的 FISRT 集和 FOLLOW 集。请注意大小写,不要混淆。列举出求A first集的过程
时间: 2023-06-11 18:10:00 浏览: 178
首先,定义一些符号集合:
终结符号集合 VT = {a, b, c, d, e}
非终结符号集合 VN = {S, A, B, D, E}
空串符号 ε ∈ VT
1. 计算 FIRST 集合:
对于每个非终结符号 A ∈ VN,计算其 FIRST 集合 FIRST(A):
(1) 对于终结符号 a,b,c,d,e,有 FIRST(a) = {a},FIRST(b) = {b},FIRST(c) = {c},FIRST(d) = {d},FIRST(e) = {e}。
(2) 对于可空非终结符号 A ∈ VN,有 FIRST(A) = {ε}。
(3) 对于非终结符号 A ∈ VN,有 FIRST(A) = FIRST(α),其中 α 是产生式 A → α 的第一个符号。
按照上述规则,可以得到每个非终结符号的 FIRST 集合:
FIRST(S) = {a, c, d, e}
FIRST(A) = {b, c, d, e, ε}
FIRST(B) = {a, c, d, e, ε}
FIRST(D) = {c, d}
FIRST(E) = {e}
2. 计算 FOLLOW 集合:
对于每个非终结符号 A ∈ VN,计算其 FOLLOW 集合 FOLLOW(A):
(1) 对于起始符号 S,有 FOLLOW(S) = {$}。
(2) 对于每个产生式 A → αBβ,有 FOLLOW(B) = FOLLOW(B) ∪ {FIRST(β) - {ε}}。
(3) 对于每个产生式 A → αB,或者 A → αBβ 且 ε ∈ FIRST(β),有 FOLLOW(B) = FOLLOW(A)。
按照上述规则,可以得到每个非终结符号的 FOLLOW 集合:
FOLLOW(S) = {$}
FOLLOW(A) = {c, $}
FOLLOW(B) = {a, c, $}
FOLLOW(D) = {b, c, $}
FOLLOW(E) = {c, $}
例如,计算非终结符号 A 的 FIRST 集合:
FIRST(A) = FIRST(D) = {c, d}
因为产生式 D → dAE 中 A 的 FIRST 集合包含 ε,所以还需要添加 FIRST(E) 中的符号:
FIRST(A) = FIRST(D) ∪ (FIRST(E) - {ε}) = {c, d, e}
阅读全文