First集Follow集通俗易懂的讲解加实例



文法:

S→ABc
A→a|ε

B→b|ε


First集合求法:

能由非终结符号推出的所有的开头符号或可能的ε,但要求这个开头符号是终结符号。如此题A可以推导出a和ε,所以FIRST(A)={a,ε};同理 FIRST(B)={b,ε};S可以推导出aBc,还可以推导出bc,还可以推导出c,所以FIRST(S)={a,b,c}


Follow集合的求法:
紧跟随其后面的终结符号或#。但文法的识别符号包含#,在求的时候还要考虑到ε。 具体做法是把所有包含你要求的符号的产生式都找出来,再看哪个有用。 Follow(S)={#}

如求A的Follow集   产生式:S→ABc A→a|ε ,但只有S→ABc 有用。跟随在A后年的终结符号是FIRST(B)={b,ε},当FIRST(B)的元素为ε时,跟随在A后的符号就是c,所以 Follow(A)={b,c} 同理Follow(B)={c}


上述如果没看懂的话,下面的讲解也可以作为参考


First
如A->aB | CD
这里面包含了组成First(A)的两种情况:
           以终结符开头,    当然要把这个终结符放到A的First里
           以非终结符开头, 先把C的First放到A的First里
                                        再看如果C的First中有空的话就把D的First放到A的First里,如果D也有空的话往后依次类推
技巧:First一般从下往上找。
           如果要找A的First,我们要找A的定义式,即A在左边的式子,看着他的右边来找。

Follow
S->(L) | aL | LC   
找Follow的三种情况:先在候选式(右边)中找到该非终结符,如L(注意例中只有一个定义,但找Follow要看到所有右边出现该非终结符的)
           如果L的右边是终结符,    那么这个终结符加入L的Follow
           如果L的右边是非终结符, 那么把这个非终结符的First除去空加到L的Follow中
           如果L处在末尾,               那么,'->'左边符号的Follow成为L的Follow
另外要注意的是:
           开始符号的Follow中要加上‘#’        
技巧:Follow一般从上往下找。
           如果要找L的Follow,要从式子的右边找到L,然后来找L的Follow,这与First是不同的。
















  • 49
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值