FIRST集合求法

FIRST集合求法

  • FIRST集的定义
    定义:令X 为一个文法符号(一个终结符或非终结符)或ε,则集合First (X) 由从X可能推导出的所有终结符号串的开头终结符组成,此外可能还有ε,它的定义如下:

(1)若X 是终结符或ε,则First (X) = {X}。
(2)若X 是非终结符,则对于每个产生式X→X1X2. . . Xn ,First (X)都包含了First(X1) - {ε}。
若对于某个i < n ,所有的集合First (X1), . . . , First (Xi) 都包括了。则First (X) 也包括了First (X i + 1 ) -{ε}。若所有集合First (X1), . . . , First (Xn)包括了ε,则First (X)也包括ε。

现在为任意串a = X1 X2 . . . Xn (终结符和非终结符的串)定义First (a),如下所示:First (a)包括First (X1) 对于每个i = 2, . . . , n ,如果对于所有的k = 1, . . . ,i -1 ,First (Xk) 包括了ε,则First (a)就包括了First (Xi)。最后,如果对于所有的i =1, . . . , n ,First (Xi) 都包括了ε,则First (a)也包括了ε。

  • FIRST集的作用
    First(A)集的作用是标示在替换非终结符A的时候,替换后的文法的首字母集合,语法分析程序根据这个来判断给定的语言是否是合法的,是符合规则的。
  • FIRST 集求法
    利用定义计算,具体步骤如下:
    (1) 若X ∈ Vt,则FIRST(X) = {X}。(即定义1)
    (2)若X ∈ Vn,且有产生式X → a……, a ∈ Vt,则a ∈ FIRST(X) (非终结符,将首个终结符加入First集)
    (3)若X ∈ VN,X → ε,则 ε ∈ FIRST(X) (直接推导)
    (4)若X→Y1,Y2,……,Yn ∈ Vn,而有产生式X → Y1,Y2,……,Yn。当Y1,Y2,……,Y(i-1) 直接推出ε时,则FIRST(Y1) - ε, FIRST(Y2) - ε, …… , FIRST(Y(i-1) - ε) ,FIRST(Yi) 都包含在FIRST(X)中(无ε)
    (5)当(4)中所有Yi 都推出 ε时,则最后的FIRST(X) = FIRST(Y1) ∪ FIRST(Y2) ∪ …… ∪ FIRST(Yn) ∪ {ε}
    反复运用(2)-(5)步骤计算,直到每个符号的FIRST集合不再增大为止

例如:文法:
S→ABc
A→a|ε
B→b|ε
解:
FIRST(A)={a,ε}
FIRST(B)={b,ε}
FIRST(S)={a,b,c}

  • 技巧:
    First一般从下往上找。
    如果要找A的First,我们要找A的定义式,即A在左边的式子,看着他的右边来找。

  • 例题
    文法G[A]
    A→BCc|gDB
    B→bCDE|ε
    C→DaB|ca
    D→dD|ε
    E→gAf|c

FIRST(A)=FIRST(BCc)∪FISRT(gDB)

=(FIRST(B)-{ε})∪FIRST(Cc)∪{g}
={b,d,a,c,g}

FIRST(B)=FIRST(bCDE)∪FIRST(ε)

={b,ε}

FIRST( C)=FIRST(DaB)∪FIRST(ca)

=FIRST(dDaB)∪FIRST(aB)∪{c}
={d,a,c}

FIRST(D)=FIRST(dD)∪FIRST(ε) ={d,ε}
FIRST(E)=FIRST(gAf)∪FIRST( c )={g,c}

  • 19
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值