第7章LR分析法(阅读).pptVIP

  • 7
  • 0
  • 约2.99万字
  • 约 85页
  • 2017-01-01 发布于重庆
  • 举报
7.4.1 LR(1)项目集族的构造 一个LR(1)项目可以看成两个部分组成,一部分和LR(0)项目相同部分我们称它为心,另一部分为向前搜索符集合。如让S′→·S,#属于初始项目集中,把#号作为向前搜索符,表示活前缀为γ(若γ是有关S产生式的某一右部)要归约成S时,必须面临输入符为#号才行。因此对初始项目[S′→·S,#]求闭包后再用转换函数逐步求出整个文法的LR(1)项目集族。具体构造步骤如下: (1) 构造LR(1)项目集的闭包函数。 a) 项目集I的任何项目都属于CLOSURE(I); b) 若有项目[A→α·Bβ,a]属于CLOSURE(I),B→γ是文法中的产生式,β∈V*,b∈FIRST(βa),则[B→·γ,b]也属于CLOSURE(I)中。 c) 重复b)直到CLOSURE(I)不再增大为止。 (2) 转换函数的构造 LR(1)转换函数的构造与LR(0)的相似,GO(I,X)=CLOSURE(J)   其中I是LR(1)的项目集,X是文法符号:   J={任何形如[A→αX·β,a]的项目|A→α·Xβ,a]∈I} 现给出直接由产生式构造识别活前缀的DFA的LR(1)项目集的闭包CLOSURE的算法: function CLOSURE (I); /* I是项目集*/ { J:= I; repeat 对J中的每个项目[A→α·Bβ,a]和产生式 B→γ;  

文档评论(0)

1亿VIP精品文档

相关文档