计算FIRST和FOLLOW设置语法

时间:2018-01-23 14:58:37

标签: parsing grammar context-free-grammar compiler-construction

我必须计算以下语法的FIRST和FOLLOW集:

A -> B C
B -> A x | x
C -> y C | y

根据我的理解,我得到以下计算:

首先我们删除左递归

A -> B C
B -> x B'
B' -> C x B' | ε
C -> y C | y

关注(A)= {$}

  

但在书中答案跟随(A)= {x,$}

为什么???他们没有删除左递归?

1 个答案:

答案 0 :(得分:0)

对于这两个语法,你对FOLLOW(A)的内容是正确的,据我所知,并且当你消除了左递归时,你没有改变语法的语言。

为什么你觉得有必要消除左递归?自上而下的解析可能不适用于左递归语法,但FIRST和FOLLOW仍然是定义良好的。因此,你不需要需要来消除左递归只是为了计算这些集合,我猜你在文本中没有这样做。

你可能已经意识到了这一点,但为了完整性,我将补充说,消除左递归肯定会改变解析树和句子形式,更重要的是,这里,FIRST和FOLLOW语法集不改变L(G)。这实际上是消除这一点的重点。

所以底线:我认为他们可能只是没有消除你书中的左递归,即使我不能肯定地说这里有什么。