关于FOLLOW函数的解释 - 语法

时间:2013-05-10 19:53:08

标签: grammar ll

我有一些问题要理解功能FOLLOW。我无法计算出语法的功能,这并不好。我尝试练习来理解这个功能,特别是这个练习,我有这个语法:

S - > ë

E - > T E'

E' - > + T E'|减去T E'|

T - > F T'

T' - > * F T'|

F - > id | (F'

F' - > E)| n)

这里计算跟随函数的结果:

S $

E),$

E'),$

T +,减去,),$

T'+,减去,),$

F *,+,minus,),$

F'*,+,minus,),$

我真的不明白为什么FOLLOW(T)= FOLLOW(T')= {+,minus,),$} 在我给出的语法中,终结符号加号和减号永远不会出现在T或T'的右边,所以如果有人可以解释我这个,那就太酷了

1 个答案:

答案 0 :(得分:1)

从概念上讲,FOLLOW(X)是可以在语法中的合法句子中的X之后出现的一组标记。因此,要计算它,您要查看X出现在规则右侧(任何规则)的位置,并查看其后面的内容。在T'的情况下,你有

T -> F T'
T' -> * F T'

因为T'是两种情况下rhs的最后一个东西,你最终得到FOLLOW(T')= FOLLOW(T)∪FOLLOW(T'),这相当于FOLLOW(T') =跟随(T)。

对于T你有:

E -> T E'
E' -> + T E'

它给你FOLLOW(T)= FIRST(E')∪跟随(E)∪跟随(E') - 包括FOLLOW,因为E'扩展到ε。根据你使用的FIRST和FOLLOW的确切配置,这可能意味着ε∈FIRST(E')(在这种情况下你将它从FOLLOW(T)中移除)或者NULLABLE(E')= true,但总体效果在FOLLOW(T)上是相同的 - 它从FIRST(E')获得+minus,从FOLLOW(E)得到)$