FOLLOW 如何为以下 CFG 工作?

How does FOLLOW work for the following CFG?

原来的cfg是

S -> S + S | SS | (S) | S* | a

重构并消除左递归后,我得到了以下缩减:

S -> TB
B -> AB | e
A -> +S | TB | *
T -> (S) | a

在计算 follow(B) 时,我可以找到的在线资源说它应该是 {$}。然而,根据龙书的规则,它看起来像 follow(B) = follow(S) + follow(A),因为规则 3(产生式 A -> aB 导致 follow(A) 中的所有内容都在 follow(B) 中。

我对规则的理解有误吗?

不对,您的互联网来源有误。您对 FOLLOW 算法的理解很好(也出现在您引用的 class 注释中)。

这实际上是一个解析练习的奇怪例子,因为语法有歧义。重构和左递归消除并不能消除歧义;最后的结果还是有歧义,有歧义的文法总会有解析冲突。