求FIRST集和FOLLOW集SELECT集合

设G=(V T ,V N ,S,P)是一个上下文无关文法。
VT表示终结符,VN表示非终结符。

FIRST集定义如下:

在这里插入图片描述
对于α可以有两种表达式:在这里插入图片描述
下面开始构造每个文法符号的FIRST集合

对于每一个X∈VT∪VN,连续使用下面规则,知道每个集合的FIRST不再增大为止:
1.X∈VT,则有FIRST(X)={X}。
2.X∈VN,且有产生式X→а…,则把а加入到FIRST(X)中;若X→ε也是一条产生式,则把ε也加入到FIRST(X)中。
3.①若X→Y…是一个产生式,且有产生式Y∈VN,则把FIRST(Y)中所有的非ε元素都加到FIRST(X)中;
②若X→Y₁Y₂…Yi Yi-₁…Yn是一个产生式,Y₁…Yi-₁都是非终结符;
(1)对于任何j,1≤j≤i-1,FIRST(Yj)都含有ε(即Y₁…Yi-₁*ε,经过多步推导出ε),则把FIRST(Yj)中所有非ε元素都加入到FIRST(X)中
(2)若所有的FIRST(Yj)中都含有ε,j=1,2…n,则把ε加入到FIRST(X)中。

FOLLOW集定义如下:

在这里插入图片描述
构造每个非终结符的FOLLOW集:
方法:(⇨*)表示多步推导
1.对于文法的开始符号S,把#加入FOLLOW(S)中;
2.若A→αBβ是一个产生式,则把FIRST(β)–{ε}(去掉ε)加入到FOLLOW(B)中;
证明:
A→αBβ是一个产生式,∀ а∈FIRST(β){ε},有β⇨а…
则有S⇨
…A…⇨…αBβ…⇨
…αBа…,所以а∈FOLLOW(B)
*
3.若A→αB是一个产生式,或则若A→αBβ是一个产生式,而β⇨*ε(β能够经过多步推导出ε;也就是说ε∈FIRST(β)),则把FOLLOW(A)加入到FOLLOW(B)中
证明:
①A→αB是一个产生式,∀ а∈FOLLOW(A),
有S⇨*…Aа…,则会出现S⇨*…Aа…⇨…αBа…
所以а∈FOLLOW(B)
②A→αB是一个产生式,∀ а∈FOLLOW(A),有β⇨ε(β能够经过多步推导出ε)
有S⇨*…Aа…,则会出现S⇨*…Aа…⇨…αBβа…⇨*…αBа…
所以а∈FOLLOW(B)

计算文法各个产生式的可选集—SELECT集
在这里插入图片描述

例题:


FIRST集:
在这里插入图片描述
FOLLOW集:(求FOLLOW集时需要注意一个表达式可能同时满足A→αBβ或者A→αB或者A→αBβ、β⇨*ε这三种形式,故需要对这三种形式都需要分析)
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值