编译原理JAVA求select集_编译原理中SELECT集是什么东西?

在上一章的时候我们介绍了编译原理中FIRST集和FOLLOW集的计算,下面这章我们来介绍一下编译原理中的SELECT集。

b61e8ef4b18788079669a7a3697259a1.png

带有科技感的抽象金属立方体漂浮在空中

若有SELECT(A->a) 若a通过n步可以推得ε,那么就有

SELECT(A->a)=FIRST(a)-{ε} U FOLLOW(A)

若a不能推得ε,那么就有

SELECT(A->a)=FIRST(a)

其实SELECT集就是预测分析表。使用预测分析表可以帮助我们分析判断一个句子是否符合语法。

例:S->AB|bC,A->ε|b,B->aD|ε,C->AD|b,D->aS|c

FIRST(S)={b} U FIRST(A)-{ε} U FIRST(B)-{ε} U {ε}

FIRST(A)={b,ε}

FIRST(B)={a,ε}

FIRST(C)=FIRST(A)-{ε} U FIRST(D)

FIRST(D)={a,c}

FOLLOW(S)=FOLLOW(D)

FOLLOW(A)=FIRST(D) U FIRST(B)-{ε} U FOLLOW(S)

FOLLOW(B)=FOLLOW(S)

FOLLOW(C)=FOLLOW(S)

FOLLOW(D)=FOLLOW(S)

对于S来说S周围有着句子的括号即#S#

故FOLLOW(S)="#"

可得

SELECT(S->AB)={FIRST(AB)-{ε}} U FOLLOW(S)

SELECT(S->bC)=FIRST(bC)

SELECT(A->ε)=FOLLOW(A)

SELECT(A->b)=FIRST(b)

SELECT(B->ε)=FOLLOW(B)

SELECT(B->aD)=FIRST(aD)

SELECT(C->AD)=FIRST(AD)

SELECT(C->b)=FIRST(b)

SELECT(D->aS)=FIRST(aS)

SELECT(D->c)=FIRST(c)

之后将其填入预测分析表即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值