编译原理什么是移进规约冲突_编译原理中SELECT集是什么东西?

本文深入探讨了编译原理中的SELECT集概念及其计算方法,用于构建预测分析表,辅助判断句子是否符合语法规则。通过举例说明了如何计算SELECT集,并详细列举了各个符号的相关集合,为读者提供了清晰的理解路径。
摘要由CSDN通过智能技术生成

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

96e16d43ae3948bd59e0d3f585f931c4.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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值