前言:
如今姐妹们对“编译原理求预测分析表例题”大体比较看重,我们都想要剖析一些“编译原理求预测分析表例题”的相关内容。那么小编也在网络上收集了一些关于“编译原理求预测分析表例题””的相关知识,希望姐妹们能喜欢,兄弟们快快来了解一下吧!在上一章的时候我们介绍了编译原理中FIRST集和FOLLOW集的计算,下面这章我们来介绍一下编译原理中的SELECT集。
若有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)
之后将其填入预测分析表即可。