编译原理——First集与Follow集

 我来答
白露饮尘霜17
2022-05-29 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6468
采纳率:100%
帮助的人:34.3万
展开全部

First(A)为A的开始符或者首符号集。

如果两个A产生式 A -> α | β ,且FIRST(α)和FIRST(β)不相交;

下一个输入符号是x,若x∈FIRST(α),则选择 A->a ,若x∈FIRST(β),则选择 A->b 。

计算FIRST(X)的方法

如果算法看不懂,那我们来根据算法来模拟一下!

因为求FIRST集合如果有终结符号会比较好处理,所以我们逆顺序进行实施;

应该一看明白了!

Follow(A)指的是在某些句型中紧跟在A右边的 终结符号 的集合

一步一步来看

2.1 第一次迭代

第一种情况: FOLLOW(T)=FIRST(E')={ + }

第二种情况 : FOLLOW(E')=FOLLOW(E)={ $ }

第一种情况: FOLLOW(T)=FIRST(E')={ + }

第二种情况 : FOLLOW(T)=FOLLOW(E')={ + , $ }

第一种情况: FOLLOW(F)=FIRST(T')={ * }

第二种情况 : FOLLOW(T')=FOLLOW(T)={ + , $ }

第一种情况: FOLLOW(F)=FIRST(T')={ * }

第二种情况 : FOLLOW(F)=FOLLOW(T')={ + , * , $ }

第一种情况 : FOLLOW(E)={ $ , ) }

2.2 第二次迭代

由于我们列出了等值关系,所以只需要再走一次第一次迭代的过程就可以了!

因为主要是FOLLOW可能在变,所以我们只需要找到FOLLOW的等值关系即可

我在上面标出了第一次迭代的FOLLOW的最新版

下面我只要列出更新的即可

2.3 第三次迭代

第三次迭代就会发现 FOLLOW集合 不再发生改变,这时候规则结束,求出FOLLOW集合。

Follow比较容易出错,出错的点主要在迭代过程的第二种情况的: A -> αBβ 且FIRST(β)包含ε

我们容易忽略这种情况。

只要把每一次迭代过程都写在纸上,尤其注重 Follow集合 的等值!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式