FIRST集和FOLLOW集的求法

FIRST集和FOLLOW集的求法

FIRST集

步骤

  1. 若X->a…,则将终结符a加入FIRST(X)中;
  2. 若X->e ,则将终结符e加入FIRST(X)中(e表示空集);
  3. 若 X->BC…D,则将First(B)所有元素(除了空集)加入First(A),然后检测First(B),若First(B)中不存在空集, 则停止,若存在则向B的后面查看,将First(C)中所有元素(除了空集)加入First(A),然后再检测First(C)中是否有空集…直到最后,若D之前的所有非终结符的First集中都含有空集,则检测到D时,将First(D)也加入First(A),若First(D)中含有空集,则将空集加入First(A)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 答:firstfollow是语法分析中的术语,它们可以通过对文法规则进行分析和推导而获得。First定义为一个非终结符号开始的产生式的所有可能的第一个符号的合, Follow定义为一个非终结符号结尾的产生式的所有可能的下一个符号的合。 ### 回答2: 求firstfollow是编译原理中文法分析的重要步骤。下面是求解这两个合的方法: 1. 求解first: - 对于每个终结符,它的first就是它本身。 - 对于每个非终结符A,如果存在一个产生式A -> a...,其中a是终结符或者串,则将a加入到A的first中。 - 如果存在一个产生式A -> B...,其中B是非终结符,则将B的first中的所有终结符加入到A的first中。 - 当一个非终结符的产生式右部可以推导出串时,将串加入到该非终结符的first中。 2. 求解follow: - 对于文法的开始符号,将特殊符号$加入到其follow中。 - 对于每个非终结符A,如果存在一个产生式B -> aA...,其中a是终结符或串,将a加入到A的follow中。 - 如果存在一个产生式B -> aA..., 其中a是非终结符,则将a的first中的所有终结符(不包括串)加入到A的follow中。 - 如果存在一个产生式B -> aA...和一个产生式A -> ...,其中A的产生式包含串,并且B不在a的follow中,则将B的follow加入到a的follow中。 通过以上求解方法,我们可以得到文法每个非终结符的firstfollow,这些合在文法分析的LL算法中起着重要的作用。 ### 回答3: 对于文法G,求解它的FirstFollow的过程如下: 1. 求First: - 对于文法G中的每个非终结符号A,如果存在产生式A -> a,则将a加入到A的First中。 - 如果存在产生式A -> ε(产生式),则将ε加入到A的First中。 - 对于文法G中的每个非终结符号A,如果存在产生式A -> B,其中B是一个非终结符号,则将B的First(除了ε)加入到A的First中。 - 重复上述步骤,直到所有的非终结符号的First不再变化。 2. 求Follow: - 将开始符号S(文法G的第一个非终结符号)的Follow设为{ $ },其中$表示输入串的结束符号。 - 对于文法G中的每个产生式A -> αBβ,将B的First(除了ε)加入到B的Follow中。 - 对于文法G中的每个产生式A -> αB,或者存在产生式A -> αBβ,且B的First包含ε,则将A的Follow加入到B的Follow中。 - 重复上述步骤,直到所有的非终结符号的Follow不再变化。 通过执行上述步骤,可以求得文法G的所有非终结符号的FirstFollow。注意,First求解时需要考虑产生式(ε),而Follow求解时需要根据产生式中的终结符号和非终结符号的相对位置来确定。此外,有些文法可能存在左递归或者二义性,需要进行适当的处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值