编译原理 | 求FIRST集和FOLLOW集的具体过程

FIRST集的构造:
计算所有文法符号X的FIRST(X),直到每个FIRST集合不再增大为止.
(1) 若X∈VT,那么FIRST(X)={X}.
(2) 若X→ε是产生式,那么把ε加入FIRST(X).
(3) 如果X是非终结符,且X→Y1Y2…Yk是产生式,若对某个i, a属于FIRST(Yi),并且ε属于所有的FIRST(Y1),FIRST(Y2), …,FIRST(Yi-1),即Y1Y2…Yi-1 ε,则把a加入FIRST(X).如果对所有的j=1,2,…,k, 有ε属于FIRST(Yj),那么把ε加入FIRST(X).

FOLLOW集的构造:
对所有的非终结符A计算FOLLOW(A).应用下面规则,直到每个FOLLOW集不再增大为止.
(1) 把#加入FOLLOW(S),其中S是开始符号,#是输入结束标记.
(2) 如果有产生式A→αBβ,那么除ε外,把FIRST(β)中的所有元素加入FOLLOW(B).
(3) 如果有产生式A→αB,或有产生式A→αBβ且 FIRST(β)含ε,那么,把FOLLOW(A)中的一切元素加入 FOLLOW(B).


栗子:

在这里插入图片描述

构造FIRST集:

FIRST(S) = {}
FIRST(M) = {}
FIRST(H) = {}
FIRST(L) = {}
FIRST(K) = {}

把所有在开头的终结符加入到对应的FIRST:

FIRST(S) = {a, }
FIRST(H) = {ε, }
FIRST(K) = {d, ε}√
FIRST(L) = {e}√
FIRST(M) = {b, }

ps:√表示已完成

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值