计算跟随集

时间:2015-02-19 13:42:15

标签: grammar

要为所有非终端A计算FOLLOW(A),请应用以下规则 直到没有任何东西可以添加到任何FOLLOW集。

  1. 将$放在FOLLOW(S)中,其中S是起始符号,$是输入 右端标记。

  2. 如果有产品A - > B,然后FIRST(b)中的所有内容除了epsilon 在FOLLOW(B)。

  3. 如果有产品A - > aBb,或生产A - > aBb,在哪里 FIRST(b)包含t,然后FOLLOW(A)中的所有内容都在FOLLOW(B)中。 a,b实际上是alpha和beta(句子形式)。这是来自龙书。

  4. 现在我的问题是在这种情况下,我们可以采取一个= epsilon? 并且b(beta)可以是像XY这样的2个非终端吗? (如果是绝对的那么它就会......)

1 个答案:

答案 0 :(得分:1)

以下是龙书实际上所说的内容:[见注1]

  1. $ 放入关注( S
  2. 对于每个产品 A →α B β,放置一切 在 FIRST(β)除了ε之外 FOLLOW(
  3. 每次制作 A →α B A →α B β其中 FIRST(β)包含 ε,将关注( A 放入 FOLLOW(
  4. 本书前面有一个关于“符号约定”的部分,其中明确指出一个小写的希腊字母,如αβ代表可能的空字符串的语法符号。所以,是的,α可以为空,β可以是两个非终结符(或任何其他语法符号串)。


    注意:

    1. 这里我在this meta post中使用@leftroundabout格式化建议的变体。 (唯一的区别是我把公式换成粗体。)如果你没有希腊语键盘,很容易输入希腊字母作为实体;只是使用,例如,& alpha; (α)或& beta; (β)。对于大写希腊字母,请使用大写字母写下名称:& Sigma; (Σ)。其他有用的符号是箭头:& rarr; (→)和& rArr; (⇒)。