编译原理 —— SELECT集
最新推荐文章于 2025-08-08 15:14:52 发布
原创
最新推荐文章于 2025-08-08 15:14:52 发布
·
2.2w 阅读
·
30
·
153
·
CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
文章标签:
#编译原理
#可选集
编译原理
专栏收录该内容
37 篇文章
订阅专栏
本文深入探讨了编译原理中的SELECT集概念,解释了产生式A→α的可选集如何定义,并指出它们在LL(1)解析中的作用。通过实例展示了如何计算产生式的SELECT集,例如针对不同产生式计算其SELECT集,如SELECT(1)、SELECT(2)等。同时,文章还强调了同一非终结符的SELECT集互不相交的重要性,以确保解析过程的唯一性。最后,简要提及了计算预测分析表的过程,其中非终结符的SELECT集如何指导构造预测分析表。
SELECT集
产生式 A→αA → αA→α 的可选集是指可以选用该产生式进行推导的输入符号的集合,记为SELECT(A→α)SELECT(A→α)SELECT(A→α)同一非终结符的各个产生式的可选集互不相交(否则依然无法确定使用哪一个产生式)
以LL(1)为例:
计算产生式的SELECT集
对于产生式①,FIRST(TE′)={(,id}(TE')=\{ (,id \}(TE′)={(,id},ε∉ε∉ε∈/ FIRST(TE′)(TE')(TE′),故 SELECT(1) = FIRST(TE′)={(,id}(TE')=\{ (,id \}(TE′)={(,id}对于产生式②,FIRST(+TE′)={+}(+TE')=\{+ \}(+TE′)={+},ε∉ε∉ε∈/ FIRST(+TE′)(+TE')(+TE′),故 SELECT(2) = FIRST(+TE′)={+}(+TE')=\{ + \}(+TE′)={+}对于产生式③,FIRST(ε)={ε}(ε)=\{ε \}(ε)={ε},ε∈ε∈ε∈ FIRST(ε)(ε)(ε),故 SELECT(3) = FIRST(ε)−{ε}+(ε)-\{ ε \}+(ε)−{ε}+FOLLOW(E′)(E')(E′)对于产生式④,FIRST(FT′)={(,id}(FT')=\{ (,id \}(FT′)={(,id},ε∉ε∉ε∈/ FIRST(FT′)(FT')(FT′),故 SELECT(4) = FIRST(FT′)={(,id}(FT')=\{ (,id \}(FT′)={(,id}…
计算预测分析表
由预测分析表可知,同一非终结符的各个产生式的可选集互不相交(如非终结符 T′T'T′ ,一个可选符号对应一个产生式)