- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
为每个LR(0)集核的每个项目都配上一个搜索符集,使得这个核成为一个LALR(1)集的核 SPONSOR算法 ①LR(0)初态集核的唯一项目 S’-?S 具有搜索符#; ②应用SPONSOR算法从初态集核开始计算每个核各个项目的全部自生搜索符。 LALR(1)项目集(核)的构造算法 利用三元式(I,A- α?ρ,a)栈来跟踪由前述算法产生的自生搜索符的传播; ①构造G的所有LR(0)集的核; ②从CLOSURE([S’-S,#])开始,利用SPONSOR算每个状态的核的自生搜索符; ③利用LALR(1)项目集核构造算法逐个进行传播计算。 综上,构造拓广文法的LALR(1)项目集(核)的步骤如下: 例8 拓广文法 的LALR(1)集核计算 (0)S’-S (2) S-R (4) L-i (1) S-L=R (3) L-*R (5) R-L ②从初态开始: I0:CLOSURE{ [S’-?S,#] } ={ [S’-?S,#] [S-?L=R,#] [S-?R,#] [L-?*R,=] [L-?i,=] [R-?L,#] [L-?*R,#] [L-?i,#] } ①初态中具有搜索符#的 S’-?S 进栈; 即:( I0, S’-?S, # ) 入栈 由SPONSOR算法:‘=’是I4的L-*?R和I5的L-i?, 的一个自生搜索符,将[I4,L-*?R,=] [I5,L-i?,=] 入栈 I0:CLOSURE{ [S’-?S,#] } ={ [S’-?S,#] [S-?L=R,#] [S-?R,#] [L-?*R,=] [L-?i,=] [R-?L,#] [L-?*R,#] [L-?i,#] } ( I0, S’-?S, # ) ( I4, L-*?R, = ) ( I5, L-i?, = ) ( I7, L-*R?, = ) ( I8, R-L?, = ) ( I2,S-L?=R, # ) ( I3, S-R?, # ) ( I2,R-L?, # ) ( I4, L-*?R, # ) ( I5, L-i?, # ) ( I1, S’-S?, # ) ( I8,R-L?, # ) ( I9, S-L=R?, # ) 栈的变化状态 ( I6,S-L=?R, # ) I4:CLOSURE{ [L-*?R, =] } ={ [L-*?R, =] [R-?L,=] [L-?*R,=] [L-?i,=] } I2:CLOSURE{ [S-L?=R, #] } ={ [S-L?=R, #] } I6:CLOSURE{ [S-L=?R, #] } ={ [S-L=?R, #] [R-?L,#] [L-?*R,#] [L-?i,#] } I4:CLOSURE{ [L-*?R, #] } ={ [L-*?R, #] [R-?L,#] [L-?*R,#] [L-?i,#] } ( I7, L-*R?, # ) I0: S’-?S, # I1:S’-S?, # I2:S-L?=R, # R-L?, # I3: S-R?, # I4:L-*?R, =/# I5: L-i?, =/# I6:S-L=?R, # I7: L-*R?, =/# I8:R-L?, =/# I9:S-L=R?, # 最终得到该文法的LALR(1)集核为: 参考资料 陈火旺,程序设计语言编译原理(第三版),国防工业出版社,83~129 冯博琴译,现代编译程序设计,邮电出版社,2.2.3,2.2.4 Kenneth C. Louden,冯博琴 等译,编译原理与实践,机械工业出版社 步骤一:令NFA的初态为I,求其CLOSURE(I),得到初态项目集。即: 求CLOSURE({S’→?S}) 步骤二:对所得项目集I和文法G的每个文法符号X(包括VT和VN) 计算GO(I,X) =CLOSURE(J),得到新的项目集。 其中J={任何形如A → ?X? ?的项目| A → ? ? X ?属于I} 步骤三:重复步骤二,直至没有新的项目集出现。 经过以上步骤构造出的项目集的全体即为LR(0)项目集规范族。 ③利用LR(0)项目集规范族和GO函数画出DFA ① 相关定义: LR(0)文法:不存在以下两种冲突的文法 移进-归约冲突 归约-归约冲突
原创力文档


文档评论(0)