FIRST集和 FOLLOW集的计算


参考哈工大课件

计算文法符号X的FIRST(X)

FIRST ( X ):可以从X推导出的所有串首终结符构成的集合
如果 X =>* ε,那么 ε∈FIRST ( X )

  • 如果X是一个终结符或者 X→ε∈P,那么FIRST ( X ) = { X }或者将ε加入到FIRST( X )中
  • 如果X是一个非终结符,且 X→Y1…Yk∈P (k≥1),那么如果对于某个i,a在FIRST (Yi ) 中且ε 在所有的FIRST(Y1) , … , FIRST(Yi-1)中(即Y1…Yi-1 =>* ε ),就把a加入到FIRST( X )中。如果对于所有的 j =1,2, . . . , k,ε在FIRST(Yj)中,那么将ε加入到FIRST( X )

计算非终结符A的FOLLOW(A)

FOLLOW(A):可能在某个句型中紧跟在A后边的终结符a的集合
FOLLOW(A)={a| S =>* αAaβ, a∈VT,α,β∈(VT∪VN)*}
如果A是某个句型的的最右符号,则将结束符“#”添加到FOLLOW(A)中

First Follow
① E → TE’ E { ( id } { # )}
② E’ → +TE’ or ε E’ { + ε } { # )}
③ T → FT’ T { ( id } { + # )}
④ T’ → *FT’ or ε T’ { * ε } { + # )}
⑤ F → (E) or id F { ( id } { * + # )}

首先,E是句型的开始符号,也是某个句型的最右符号,所以将“#”加入follow集中。然后开始逐个分析每一条产生式。
根据①,E’的first集的所有终结符可以跟在T的后面,所以将firstE中所有终结符+,加入到E的follow集中。由于E’的first集中包含空串,因此所有能够跟在E后面的符号都能跟在T后面。所以将followE中的符号#加到followT中。E’是产生式①的最后一个符号&

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值