【编译原理】First集和Follow集简易解释(偏人话)

\ε:非ε元素

First集和Follow集是集合


First集规则(相应字母在->左边,查找->右边第一个东西)

①A->aB,a加进First(A);

        (->右边第一个是终结符,加进集合)

②A->ε,ε加进First(A);

③A->Xa,将集合First(X)\ε加入First(A)中。

        (->右边第一个是非终结符,将该非终结符的First集(去空)加进集合)

(我的理解是:如果取了空,那头就不是头了);

 

①First(E)=First(T)=First(F)={(,i}

式子1,4,7,8

②First(T’)={*,ε}

式子5,6

总结:

头是终结符,照写。

如果头是非终结符,(若非终结符能被替换为ε)写不取空的其他情况。


Follow集合规则(相应字母在->右边,查找相应字母的右边的东西)

①A是开始符号,Follow(A)有#;

②B->Aa,Follow(A)有a

        (后面是终结符,加进我的Follow集)

③B->AC,First(C)\ε加入Follow(A)。

        (后面是非终结符,将该非终结符的First集加进我的Follow集)

④B->aA或B->aAC,C->ε。将Follow(B)加入Follow(A)

        (后面没东西,或者后面有东西,但这个东西可以取空。将->左边字母的Follow集加入我的Follow集)

①E是开始符号,Follow(E)加#;找E,看到产生式7,E后面有个“)”,将“)”加进Follow(E)。

②右边找E’,看到产生式1、2,运用规则(4),将1和2的头的Follow集(Follow(E)和Follow(E’))加进Follow(E’)。

③右边找T,看到产生式1、2。因为E’可取ε,用规则(4),将Follow(E)和Follow(E’)加进Follow(T)中;再用规则(3),将无ε的First(E)和First(E’)加入到Follow(T)。

 

 

总结:像产生式(5)+(6)这种组合,写两条,一条是“头”的Follow,一条是“后”First(无ε)。

开始符号的集合要加#。

  • 187
    点赞
  • 834
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值