FIRST集与FOLLOW 集合终极讲解

来源:互联网 发布:淘宝旧版本v3.7.2下载 编辑:程序博客网 时间:2024/05/17 04:31

最近一直在学first集合和follow集合,一直没怎么搞明白,今天花了一点时间搞得差不多了。记录下来~~一下图文法为例:
S->AB
S->bC
A->∑
A->b
B->∑
B->aD
C->AD
C->b
D->aS
D->c
FIRST集合相对FOLLOW集合更好求也更简明,故不在此贴重复first集合方法,下面是follow集合方法:规则如下:
1:若S是文法的开始符号,把{S}加入到follow(S)中。
2:(重点来了)若A->aBβ,那么把first(β)中非空的元素加到follow(B)中。若β能推出∑,也就是这个试子有可能变成A->aB或是β=>∑(这里等号上面有一个*打不出来了),那么就把follow(A)加入到follow(B)中。好勒目前为止,规则叙述完了,那就正式开始写集合吧~
first(S)={∑,a,b}(需要注意的是,S->AB,先走A这条路,A可以推出b和∑,但是由A推出的∑是不能要的,因为后面还有符号,所以继续走B,B可以推出∑和a,而B后面没有符号了,所以可以把∑加进去)
first(A)={∑,b}
first(B)={∑,a}
first(C)={a,b,c}
first(D)={a,c}
产生式右部的first集合就不在列举出来,下面是follow集合:
根据规则:
follow(S)={#}Ufollow(D)
follow(A)=(fist(B)-{∑})Ufollow(S)Ufirst(D)
follow(B)=follow(S)
follow(C)=follow(S)
follow(D)=follow(C)Ufollow(D)
由上式可以得出:follow(S)={#},剩下的可以自己推了,等有时间我再多举几个例子

原创粉丝点击