FOLLOW 对以下 CFG 有何作用?

问题描述

原来的配置是

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 算法的理解很好(并且也出现在您引用的课堂笔记中)。

对于解析练习来说,这实际上是一个奇怪的例子,因为语法有歧义。重构和左递归消除不会消除歧义;最终结果仍然是模棱两可的,模棱两可的文法总会有解析冲突。