以下集合算法的第三条规则的基本原理是什么?

时间:2017-10-22 18:22:16

标签: compiler-construction ll

对于编译器类,我们获得了以下用于查找FOLLOW(A)的规则:

α

  1. 如果A是起始符号,请将“$”添加到FOLLOW(A)
  2. 如果A - >; αBβ,将FIRST(β) - {ε}加到FOLLOW(B)
  3. 如果A - >; αB,或(A - >αBβ和β* - > ),将FOLLOW(A)加到FOLLOW(B)。
  4. 我们还获得了关注(A)的非正式定义: 能够以句子形式立即跟随A的终端集。

    为什么第三条规则是真的?

    我理解如何应用第三条规则,但我很困惑为什么必须如此。任何人都可以提供一个需要使用它的具体例子,或者一个在没有第三条规则的情况下会失去非正式定义的例子吗?

1 个答案:

答案 0 :(得分:2)

想象一下,你有一个制作规则

  

A→αBβ

你知道β可以得到空字符串。在这种情况下,如果您使用上述生产规则然后将β扩展为空字符串,那么合法遵循A非终结符的字符也可以遵循B非终结符。

举个例子,让我们来看看这个简单的语法:

  

S→Ax

     

A→CBC

     

C→ε

     

B→y

在这里,我们可以进行这种推导,将x放在B:

之后
  

S→Ax→CBCx→CBx