FIRST集与FOLLOW 集合终极讲解

最近一直在学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)={#},剩下的可以自己推了,等有时间我再多举几个例子

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值