编译原理——第四章-构造FIRST集和FOLLOW集的方法

一 、构造 FIRST 集的算法

定义
在这里插入图片描述

例子加深理解理解****

在这里插入图片描述

①首先将各个候选式中的终结符填入FIRST集中
1.先看E的候选式首个是T,不是终结符,且现在我们还不知道FIRST(T),所以先看下一个
2.先看E‘的候选式首个是+,是终结符,所以将+填入FIRST(E’)
3.先看T的候选式首个是F,不是终结符,且现在我们还不知道FIRST(F),所以先看下一个
4.先看T’的候选式首个是*,是终结符,所以将*填入FIRST(T’)
5.先看F的候选式首个是(和id,是终结符,所以将(和id填入FIRST(F)

在这里插入图片描述

②将各个候选式中有ε的填入FIRST集中
在这里插入图片描述
③现在我们看T—>FT’, 可以知道FIRST(F),所以将FIRST(F)-{ε }填入FIRST(T),因为FIRST(F)中没有ε,所以不用看T’的FIRST集。
在这里插入图片描述


现在我们看E—>TE’, 可以知道FIRST(T),所以将FIRST(T)-{ε }填入FIRST(E),因为FIRST(F)中没有ε,所以不用看E’的FIRST集。
在这里插入图片描述

⑤最后我们就得到了完整的FIRST集

二、构造 FOLLOW 集的算法

定义

在这里插入图片描述

解法

在这里插入图片描述在这里插入图片描述

还是上题解释

由前面,我们已经求出了各个FIRST集,接下来接着求FOLLOW集:
在这里插入图片描述


由于E是文法的开始符号,所以将结束符‘#’填入FOLLOW(E)中,然后再各个产生式中找含有E的,只有F->(E)|id, 利用规则(2),所以将FIRST( ) )加入到FOLLOW(E)中

在这里插入图片描述


由E->TE’,利用规则3 将FOLLOW(E)写入FOLLOW(E‘),
由E’->+TE’|ε ,利用规则3 将FOLLOW(E’)写入FOLLOW(E‘),

在这里插入图片描述


由E->TE’,利用规则2 将FIRST(E‘)- {ε} 写入FOLLOW(T), 当FIRST(E‘)的元素为ε,利用规则3 将FOLLOW(E)写入FOLLOW(T)
由E’->+TE’|ε ,规则2 将FIRST(E‘)- {ε} 写入FOLLOW(T), 当FIRST(E‘)的元素为ε,利用规则3 将FOLLOW(E’)写入FOLLOW(T)

在这里插入图片描述


由T->FT’,利用规则3 将FOLLOW(T)写入FOLLOW(T’),
由T’->*FT’|ε,利用规则3 将FOLLOW(T’)写入FOLLOW(T’),

在这里插入图片描述


由T->FT’,利用规则2 将FIRST(T’)写入FOLLOW(F),当FIRST(T’)的元素为ε,利用规则3 将FOLLOW(T)写入FOLLOW(F)
由T’->*FT’|ε,利用规则2 将FIRST(T’)写入FOLLOW(F),当FIRST(T’)的元素为ε,利用规则3 将FOLLOW(T’)写入FOLLOW(F)

在这里插入图片描述

三、练习题

题1
在这里插入图片描述

解:

在这里插入图片描述

题2

  • 50
    点赞
  • 170
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大胖东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值