0
  1. S → asg
  2. S → 如果 C 则 SE
  3. C → 布尔
  4. E → 其他 S
  5. E → λ

所有小写​​字母和 λ 都是终端符号

我需要帮助来推导该语法的以下集合。我通常不会遇到这些问题,而且我知道规则,但是当我从书中练习这个例子时,这是我唯一能得到的:

Follow(S) = {$} U Follow(E) 
Follow(C) = 
Follow(E) = 
4

1 回答 1

1

根据https://www.cs.uaf.edu/~cs331/notes/FirstFollow.pdf

要计算所有非终结符 A 的 FOLLOW(A),请应用以下规则,直到无法将任何内容添加到任何 FOLLOW 集中:

  1. 将 $ 放在 FOLLOW(S) 中,其中 S 是开始符号,$ 是输入右结束标记。
  2. 如果有一个产生式 A ⇒ αΒβ,那么 FIRST(β) 中的所有内容,除了 ε,都放在 FOLLOW(B) 中。
  3. 如果存在产生式 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}
于 2017-10-02T05:13:42.603 回答