跟随集的计算
Computation of follow set
要计算所有非终结符 A 的 FOLLOW(A),请应用以下规则
直到无法将任何内容添加到任何 FOLLOW 集。
将$放在FOLLOW(S)中,其中S是开始符号,$是输入
右结束标记 .
如果产生式 A -> B,则 FIRST(b) 中除 epsilon 之外的所有内容
在 FOLLOW(B) .
如果有产生式A -> aBb,或产生式A -> aBb,其中
FIRST(b) 包含 t,然后 FOLLOW(A) 中的所有内容都在 FOLLOW(B) 中。
a,b 实际上是 alpha 和 beta(句子形式)。这是来自龙书
现在我的问题是在这种情况下我们可以采用 a=epsilon 吗?
b(beta) 可以像 XY 一样是 2 个非终结符吗? (如果是 senentntial 那么它肯定是..)
龙书的实际内容如下:[见注释 1]
- 将$放入FOLLOW(S).
- 对于每一个产生式A→αBβ,把所有的
在 FIRST(β) 除了 ε 进入
关注(B)
- 对于每个产生式A→αB或
A→αBβ 其中FIRST(β)包含
ε, 将 FOLLOW(A) 放入
关注(B).
本书前面有一节关于 "notational conventions",其中明确指出像 α 或 这样的小写希腊字母β 表示一个可能为空的文法符号串。所以,是的,α 可以是空的,β 可以是两个非终结符(或任何其他文法符号串)。
注:
- 这里我使用了@leftroundabout 在this meta post 中提出的格式建议的变体。 (唯一的区别是我把公式加粗了。)如果手边没有希腊语键盘,很容易将希腊字母作为实体输入。例如,只需使用 α (α) 或 β (β)。对于大写希腊字母,用大写字母写名字:Σ (Σ)。其他有用的符号是箭头:→ (→) 和 ⇒ (⇒).
要计算所有非终结符 A 的 FOLLOW(A),请应用以下规则 直到无法将任何内容添加到任何 FOLLOW 集。
将$放在FOLLOW(S)中,其中S是开始符号,$是输入 右结束标记 .
如果产生式 A -> B,则 FIRST(b) 中除 epsilon 之外的所有内容 在 FOLLOW(B) .
如果有产生式A -> aBb,或产生式A -> aBb,其中 FIRST(b) 包含 t,然后 FOLLOW(A) 中的所有内容都在 FOLLOW(B) 中。 a,b 实际上是 alpha 和 beta(句子形式)。这是来自龙书
现在我的问题是在这种情况下我们可以采用 a=epsilon 吗? b(beta) 可以像 XY 一样是 2 个非终结符吗? (如果是 senentntial 那么它肯定是..)
龙书的实际内容如下:[见注释 1]
- 将$放入FOLLOW(S).
- 对于每一个产生式A→αBβ,把所有的 在 FIRST(β) 除了 ε 进入 关注(B)
- 对于每个产生式A→αB或 A→αBβ 其中FIRST(β)包含 ε, 将 FOLLOW(A) 放入 关注(B).
本书前面有一节关于 "notational conventions",其中明确指出像 α 或 这样的小写希腊字母β 表示一个可能为空的文法符号串。所以,是的,α 可以是空的,β 可以是两个非终结符(或任何其他文法符号串)。
注:
- 这里我使用了@leftroundabout 在this meta post 中提出的格式建议的变体。 (唯一的区别是我把公式加粗了。)如果手边没有希腊语键盘,很容易将希腊字母作为实体输入。例如,只需使用 α (α) 或 β (β)。对于大写希腊字母,用大写字母写名字:Σ (Σ)。其他有用的符号是箭头:→ (→) 和 ⇒ (⇒).