编译原理First和Follow个人整理详细

First集合

First集合:
有一个在csdn搜到的解释很明了,我很喜欢
直达通道
说First集合就是自己的开始终结符
是自己非终结的首
我觉得就靠这个就完全可以了

例如:
1.E->TE’
2.E’->+TE’| ε
3.T->FT’
4.T’->*FT’| ε
5.F->(E) | id

First(T)={(,id}
根据第三行第一个跟着的是F,F等价于(E)或id,这里面(和id就是终结符,为所求

First(T’)={*,ε}
根据第四行,第一个跟着的是*或ε,第一个就是终结符了,所以不用再去找非终结符去推导了,为所求

First(E’)={+,ε}
第二行,第一个跟着的就是+,也能推出空,为所求

反正我是理解了,嘎嘎嘎嘎嘎,书上的定义我是真看不来

Follow集合

Follow集合
就是自己后面跟着的,不属于自己的尾首
就是后面跟着的别的非终结符的尾首,终结符

当然还要知道
如果是开始符号,应将输入结束标志假如Follow集合中,一般为#或@

对于A -->αB,将follow(A)结果加入follow(B)
对于A -->αBβ
如果β不空,就把first(β)加入follow(B)
如果β空,就把first(β)-ε和Follow(A)加入follow(B)

还是那道题

例如:
1.E->TE’
2.E’->+TE’| ε
3.T->FT’
4.T’->*FT’| ε
5.F->(E) | id

FOLLOW(F)=
第三行,F后面跟着的是T’,T’可以推出ε,就把First(T’)-ε和Follow(T)加入
此时有FOLLOW(F)=First(T’)-ε、Follow(T)

先看Follow(T)
第二行,T后面是E’,并且E’可以推出ε,就把First(E’)-ε和Follow(E’)加入
此时有FOLLOW(F)=First(T’)-ε、First(E’)-ε、Follow(E’)

再看Follow(E’)
第一行,E’后面空,<想成有个β,但β就是空>就把First(空)-ε和Follow(E)加入
First(空)-ε我认为就可以省略了,(我自己认为的)
此时有FOLLOW(F)=First(T’)-ε、First(E’)-ε、Follow(E)

最后看Follow(E)
第五行,E后面跟着),非终结符,尾首,就是我们找的!!!!!
同时,E是开始符号,所以#也属于
此时有Follow(E)={ ),#}

综上所述:
FOLLOW(F)=First(T’)-ε、First(E’)-ε、Follow(E)
其中
First(T’)-ε={*,ε}-{ε}={*}
First(E’)-ε={+,ε}-{ε}={+}
Follow(E)={ ),#}

FOLLOW(F)={*,+,),#} 终于做完了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值