【编译原理】First集和Follow集的构造

First集合的构造

计算文法符号X的First(X)时,不断应用下列规则,直到再没有新的终结符号或者ε可以被加入到First集合中为止:
1)如果X是一个终结符号,那么First(X)=X。
2)若X→…右边第一个符号是终结符或 ε ,则直接将其加入 First(X)。
3)若X→…右边第一个符号是非终结符,则将其 First 集的的非 ε 元素加入 First(X)。
4)若X→…右边第一个符号是非终结符而且紧随其后的是很多个非终结符,这个时候就要注意是否有 ε 。
 4.1]若第 i 个非终结符的 First 集有 ε ,则可将第 i+1 个非终结符去除 ε 的 First 集加入 First(X)。
 4.2]若所有的非终结符都能够推导出 ε ,则将 ε 也加入到 First(X)。
现在我们可以按照如下方法计算任何串X1X2X3…Xn的First集合。向First(X1X2X3…Xn)加入First(X1)中所有的非ε符号。如果ε在First(X1)中,再加入First(X2)中所有的非ε符号;如果ε还在First(X2)中,再加入First(X3)中所有的非ε符号,以此类推。最后,如果ε在所有的First(Xi)中,那么将ε加入到First(X1X2X3…Xn)中。

Follow集合的构造

计算非终结符号A的First(A)时,不断应用下列规则,直到再没有新的终结符号可以被加入到任意Follow集合中为止:
1)将$放到Follow(S)中,其中S是开始符号,而 $ 是输入右端的结束标记。
2)如果存在一个产生式A→αBβ,那么First(β)中除了ε之外的所有符号都在Follow(B)中。
3)如果存在一个产生式A→αB,或存在产生式A→αBβ且First(β)包含ε,那么Follow(A)中所有符号都在Follow(B)中。
PS:α,β可以为空。

预测分析表的构造

消除左递归之后对于文法的每一个产生式A→α,进行如下处理:
1)对于First(α)中的每个终结符号a,将A→α加入到M【A,a】中。
2)如果ε在First(α)中,那么对于Follow(A)中的每一个终结符号b,将A→α加入到M【A,b】中。如果ε在First(α)中,且$在Follow(A)中,也将A→α加入到M【A, $】中。
在完成上面的操作后,如果M【A,a】中没有产生式,那么将M【A,a】设置为error(在表中用空条目表示)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值