我怀疑一个问题,试图计算其中需要FOLLOW(A)的FOLLOW(S),但由于A生产是在S生产之后,我们还没有计算出FOLLOW(A)。所以,我们应该添加FOLLOW(A)太过FOLLOW(S)???
答案 0 :(得分:0)
要为任何非终端S计算FOLLOW(S),请应用followwing规则,直到任何FOLLOW集都无法添加任何内容。
将$放在FOLLOW(S)中,其中S是起始符号。
如果有生产S - > CBD,那么除了epsilon之外,FIRST(D)中的所有内容都在FOLLOW(B)中。
如果有骄傲S - > CB,或生产S - > CBD,其中FIRST(D)包含epsilon,然后FOLLOW(S)中的所有内容都在FOLLOW(B)中。
尝试计算其中需要FOLLOW(A)的FOLLOW(S),但是作为A. 生产是在S生产后,我们还没有计算出FOLLOW(A) 那么,我们是否应该加下FOLLOW(A)以及FOLLOW(S)???
所以,从给定的语法中可以看出,
根据规则1,后面的(S)将包含$。
此外,根据规则2,S出现在主体中,后面跟着D(非终端),因此,除了第一个(D)中的epsilon之外的所有内容都必须在FOLLOW中(S)。因此,FOLLOW(S)必须包含。
此外,根据规则3,考虑到生产A-> ASD | epsilon和FIRST(D)包含epsilon,我们应该得到FOLLOW(S)= FOLLOW(A)。
所以,是的,您需要在FOLLOW(S)之前计算FOLLOW(A)。
并且,关注(A)= FIRST(S)中的所有内容,除了epsilon + b = {a,b}。
因此,关注(S)= {a,b,f,$}。
我不知道你如何计算FOLLOW(S)是计算FOLLOW(S)所必需的。事实并非如此。请再次阅读本答案开头提到的规则1到3。