【编译原理】求FIRST集和FOLLOW集

摘要:对于普遍的求FIRST集和FOLLOW集做法而言,我在学习过程中,觉得FIRST集应该有一些需要额外考虑的东西。若有不对,请指出。

一、大多数博客或者视频中的介绍做法:

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

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

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

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

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

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

2、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)

 二、针对求FIRST集,个人觉得需要额外注意的点:

1、算法(理论)支撑

2、有了算法的支撑,以一个简单例子讲解需要注意的点。

(1)基础知识:对于这个例子,我们首先要知道:

(2)重要的是,在这个过程中,我认为需要注意的:

对于FIRST(AB) = {a, b, ε},因为A中有ε,所以才会继续求FirstB);

以及对于FIRST(bC) = {b} , 因为b中无ε,所以不会再求FirstC);

原因在于算法中这句UNTIL:当无法满足条件的时候,即ε不属于当前符号的FIRST集,则停止并入其余符号的FIRST集。

同理,对于其它求FIRST也是如此。


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值