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 注释中)。
这实际上是一个解析练习的奇怪例子,因为语法有歧义。重构和左递归消除并不能消除歧义;最后的结果还是有歧义,有歧义的文法总会有解析冲突。
原来的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 注释中)。
这实际上是一个解析练习的奇怪例子,因为语法有歧义。重构和左递归消除并不能消除歧义;最后的结果还是有歧义,有歧义的文法总会有解析冲突。