问题描述
原来的配置是
S -> TB
B -> AB | e
A -> +S | TB | *
T -> (S) | a
在重构并消除左递归后,我得到了以下缩减:
follow(B)
在计算 follow(B) = follow(S) + follow(A)
时,我可以找到的在线资源说它应该是 {$}。然而,根据龙书的规则,它看起来像A -> aB
,因为规则3(产生式follow(A)
导致follow(B)
中的所有内容都在program has triggered a breakpoint
中。
我是否对规则理解有误?
解决方法
不,您的互联网资源有误。您对 FOLLOW 算法的理解很好(并且也出现在您引用的课堂笔记中)。
对于解析练习来说,这实际上是一个奇怪的例子,因为语法有歧义。重构和左递归消除不会消除歧义;最终结果仍然是模棱两可的,模棱两可的文法总会有解析冲突。