- S → asg
- S → 如果 C 则 SE
- C → 布尔
- E → 其他 S
- E → λ
所有小写字母和 λ 都是终端符号
我需要帮助来推导该语法的以下集合。我通常不会遇到这些问题,而且我知道规则,但是当我从书中练习这个例子时,这是我唯一能得到的:
Follow(S) = {$} U Follow(E)
Follow(C) =
Follow(E) =
所有小写字母和 λ 都是终端符号
我需要帮助来推导该语法的以下集合。我通常不会遇到这些问题,而且我知道规则,但是当我从书中练习这个例子时,这是我唯一能得到的:
Follow(S) = {$} U Follow(E)
Follow(C) =
Follow(E) =
根据https://www.cs.uaf.edu/~cs331/notes/FirstFollow.pdf:
要计算所有非终结符 A 的 FOLLOW(A),请应用以下规则,直到无法将任何内容添加到任何 FOLLOW 集中:
- 将 $ 放在 FOLLOW(S) 中,其中 S 是开始符号,$ 是输入右结束标记。
- 如果有一个产生式 A ⇒ αΒβ,那么 FIRST(β) 中的所有内容,除了 ε,都放在 FOLLOW(B) 中。
- 如果存在产生式 A ⇒ αΒ,或产生式 A ⇒ αΒβ,其中 FIRST(β) 包含 ε(即 β ⇒ε),则 FOLLOW(A) 中的所有内容都在 FOLLOW(B) 中。
假设S
是语法中的开始符号并λ
表示一个空字符串,我们得到:
{$} ⊆ Follow(S)
根据规则 1。(First(E) \ {λ}) ⊆ Follow(S)
根据规则 2/产生式 2。Follow(E) ⊆ Follow(S)
根据规则 3/产生式 4。(First(then S E) \ {λ}) ⊆ Follow(C)
根据规则 2/产生式 2。Follow(S) ⊆ Follow(E)
根据规则 3/产生式 2。First(then S E)
只是then
(因为它是终端),所以我们有{then} ⊆ Follow(C)
.
这是 上的唯一约束Follow(C)
,因此满足它的最小集合是:
Follow(C) = {then}
因为我们有Follow(E) ⊆ Follow(S)
and Follow(S) ⊆ Follow(E)
,所以(哈哈)它们是相等的:
Follow(E) = Follow(S)
最后我们有
Follow(S) = {$} ∪ (First(E) \ {λ})
幸运First(E)
的是很简单,因为E
只有两个产生式,一个是空的,另一个以终结符号开头:
First(E) = {λ, else}
所以
Follow(S) = {$, else}
和
Follow(E) = {$, else}