如何求FIRST集、FOLLOW集、SELECT集---方法和例题讲解

注:α、β表示符号串

如何求FIRST集

(一)求符号的FISRST集

对于文法G中的任意一个符号X(X属于终结符号和非终结符号),其FISRST(x)的产生如下:
(1),若X属于终结(VT),则FIRST(X)={X}
(2),若X属于非终结符号(VN),且有形如X->a的产生式(a属于非终结符号)或者形如X->ε,
	  则将a或者ε加入FIRST(X)中
(3),如果文法中有如下的产生式
					X->Y1Y2....Yk
		① 若Y1属于非终结符号,则把FIRST(Y1)中的一切非ε符号加入FIRST(X)中
		②若Y1属于终结符号,则把Y1入到FIRST(X)中
		③ 若对于一切2≤i≤k,若Y1Y2....Yk均为非总结符号,
		  其中存在Yj(1≤j≤i-1),
		  使得ε∈FIRST(Yj),则将FIRST(Yj)中的一切非ε符号加入FIRST(X)中
		④若对于一切1≤i≤k,都有ε∈FIRST(Yi),则将ε加入到FIRST(X)中
		(注:③和④对于复杂情况的ε的加入做了探讨)

例:求文法G[E]:
在这里插入图片描述
中非终结符号的FIRST集
在这里插入图片描述

(二)求符号串的FIRST

对于文法G的任意符号串α=X1X2...Xn,则FIRST(α)的产生如下:
	(1)置FIRST(α)=Ø
	(2)将FIRST(X1)中的一切非ε符号加入到FIRST(α)中
	(3)若ε∈FISRT(X1),将FIRST(X2)中的一切非ε加入到FIRST(α)中
			若ε∈FISRT(X1)和ε∈FIRST(X2),将FIRST(X3)中的一切非ε加入到FIRST(α)中
			依次类推
	(4)若对于一切1≤t≤n,ε∈FIRST(X),则将ε加入FIRST(X)中

例:参考上述题目,求
在这里插入图片描述
的FIRST集
在这里插入图片描述

如何求FOLLOW集

(1)对于文法开始符号S,令#∈FOLLOW(S)
(2)(重点)看产生式右部:
	①若产生式形如A->αBβ的产生式,且β≠ε,则将FIRST(β)中的一起非ε加入到FOLLOW(B)中
	②若产生式形如A->αB或者A->αBβ(ε∈FIRST(β))的产生式,
	 则将FOLLOW(A)中的全部元素加入到FOLLOW(B)中
(3)FOLLOW集中无ε

例如:求文法G[E]:
在这里插入图片描述
中非终结符号的的FOLLOW集
在这里插入图片描述

如何求SELECT集

对于产生式P->α的可选集(SELECT)产生如下
1 若α不能推出ε,则
	SELECT(P->α)=FIRST(α)
2,若α能推出ε,则
	SELECT(P->α)=(FIRST(α)-{ε})∪FOLLOW(P)

例:求文法G[S]:
在这里插入图片描述
所有产生式的SELECT

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值