我必须计算以下语法的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,$}
为什么???他们没有删除左递归?
答案 0 :(得分:0)
对于这两个语法,你对FOLLOW(A)的内容是正确的,据我所知,并且当你消除了左递归时,你没有改变语法的语言。
为什么你觉得有必要消除左递归?自上而下的解析可能不适用于左递归语法,但FIRST和FOLLOW仍然是定义良好的。因此,你不需要需要来消除左递归只是为了计算这些集合,我猜你在文本中没有这样做。
你可能已经意识到了这一点,但为了完整性,我将补充说,消除左递归肯定会改变解析树和句子形式,更重要的是,这里,FIRST和FOLLOW语法集不改变L(G)。这实际上是消除这一点的重点。
所以底线:我认为他们可能只是没有消除你书中的左递归,即使我不能肯定地说这里有什么。