first、follow、select集的计算

在进行语法分析的时候,特别是自顶向下的语法分析,比如LL(1)分析、LL(0)分析,需要求出文法的first集和follow集,进而求出select集,然后根据select集得到预测分析表。但书上给的计算方法过于形式化,相对来说比较抽象,不易理解,所以,下面介绍好理解的计算方法。

first 集

基本定义如下:

first(X): 可以从X推导出的所有串首终结符构成的集合

若 X ->˙ε,则 ε∈first(X)

算法如下:

运用以下规则,直到没有任何终结符或ε可以被加入到任何first集中为止

  1. X如果是一个终结符,则 first(X)={X}
  2. X如果是一个非终结符,且X->Y···Y∈P(k>=1)
    1. 若 Y -/->ε,则first(X)=first(Y)
    2. 若 Y -->ε,Y -/->ε,则 first(X) = first(Y) + first(Y) ,其中包含ε
    3. 若 Y 的前(k-1)个都能推导出 ε,则把 first(Y)··· first(Y) 和 ε 加入到first(X)中
    4. X -->ε,则把 ε 加入到first(X)中

follow 集

定义:

follow(A):可能在某个句型中紧跟在 A后面的 终结符a的集合

如果 A 是某个句型的最右符号,则将结束符 # 加入到 follow(A)中

计算方法:

  1. 将 # 放入follow(S)中,S 是开始符号
  2. 对于 A–>αBβ
    1. ε 不属于 first(β),则 follow(B) = first(β)
    2. εfirst(β),则 follow(B) = first(β) - {ε} + follow(A)
  3. A–>αBfollow(B) = follow(A)

注意:上面说的α,既可以是终结符,也可以是非终结符

select 集

这里先定义α 代表 一个 终结符,大写字母 是 非终结符

  • 对于产生式 A->BC 或 A->B
    • B 推不出 ε,则 select(A->BC) = first(B)
    • B 推出 ε,则 select(A->BC) = [first(B) - {ε}] U follow(A)
  • 对于产生式 A->αB,则 select(A->αB) = {α}
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值