- 1、本文档共85页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[教育学]第7章 LR 分析法
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→γ; α,β,γ∈V*;b ∈FIRST(βa), 若B→·γ,b不在J中 Do 将B→·γ,b加到J中 until 再没有项目加到J中 return J }; 对项目[A→α·Bβ,a],计算B的向前搜索符时,应为FIRST(βa),这是因为β∈V*,即β可能为ε,而a是用产生式A→αBβ归约时的向前搜索符,而现在β为ε,就等于用A→αB归约,向前搜索符为a,那么用A→αB归约前,必须先用产生式B→γ归约成B,因此,B的向前搜索符时也应为a。 对文法G′的LR(1)项目集族的构造仍以[S′→·S,#]为初态集的初始项目,然后对其求闭包和转换函数,直到项目集不再增大。 也就是对状态I经过符号X后转向状态J,求出J的基本项目后,对基本项目求闭包即为CLOSURE(J)。 现在我们可以对上面7.4例中不能用SLR(1)方法解决I5,I7中移进-归约冲突的文法构造它的LR(1)项目集规范族如下: I0:S′→·S,# S→·aAd,# S→·bAc,# S→·aec,# S→·bed,# I1:S′→S·,# I2:S→a·Ad,# S→a·ec,# A→·e,d I3:S→b·Ac,# S→b·ed,# A→·e,c I4: S→aA·d,# I5: S→ae·c,# A→e·,d I6: S→bA·c,# I7: S→be·d,# A→e·,c I8: S→aAd·,# I9: S→aec·,# I10:S→bAc·,# I11:S→bed·,# (0) S? →S (1) S→aAd (2) S→bAc (3) S→aec (4) S→bed (5) A→e 这样LR(1)方法构造的项目集规范族在项目集I5和I7中的移进-归约冲突,由于归约项目的搜索符集合与移进项目的待移进符号不相交,所以在I5中,当面临输入符为d时归约,为c时移进,而在I7中则当面临输入符为c时归约,为d时移进,冲突已全部可以解决,因此该文法为LR(1)文法。 7.4.2 LR(1)分析表的构造 由于一个LR(1)项目可以看成两个部分组成,一部分和LR(0)项目相同部分我们称它为心,另一部分为向前搜索符集合,因而LR(1)分析表的构造与LR(0)分析表的构造大部分相同,仅对归约项目的归约动作取决于该归约项目的向前搜索符集,只有当面临输入符属于向前搜索符的集合,才做归约动作,其它情况均出错。具体构造过程如下: 若已构造出某文法的LR(1)项目集族C。C={I0,I1,…,In},其中Ik的k为分析器的状态,则动作ACTION表和状态转换GOTO表构造方法如下: (1) 若项目[A→α·aβ,b]属于Ik,且GO(Ik,a)=Ij,其中a∈VT,则置ACTION[k,a]=Sj。其Sj的含义是把输入符号a和状态j分别移入文法符号栈和状态栈。 (2) 若项目[A→α·,a]属于Ik,则置ACTION[k,a]= rj 其中a∈VT,rj 的含义为把当前栈顶符号串α归约为A(即用产生式A→α归约)。j为在文法中对产生式A→α的编号。 (3) 若项目[S?→S·,#]属于Ik,则置ACTION[k,#]=acc,表示接受。 (4) 若GO(Ik,A)=Ij,其中A∈VN,则置GOTO
您可能关注的文档
- [所有分类]建立大学教师研究绩效指标权重之研究.pdf
- [所有分类]快递企业统计报表指标解释.doc
- [所有分类]成本会计课程教学设计方案实施的回顾与体会.doc
- [所有分类]技术思维方法技术路线.ppt
- [所有分类]招商谈判技巧.ppt
- [所有分类]文书处理与系统操作注意事项.ppt
- [所有分类]新闻.ppt
- [所有分类]日光灯功率因数的提高.pdf
- [所有分类]日本21世纪“走向全方位大国”的国家战略.doc
- [所有分类]某某学校领导班子征求意见表.doc
- 历史的巨响 奋进的力量纪念我国第一颗原子弹爆炸成功60周年-热点速递“内容简介+素材集锦+时评+作文链接+范文”.docx
- 历史的巨响 奋进的力量:纪念我国第一颗原子弹爆炸成功60周年-热点速递“内容简介+素材集锦+时评+作文链接+范文”.docx
- 吉林省2016年中考文综试卷(解析版).doc
- 吉林省2016年中考文综试卷(解析版).doc
- 吉林省2016年度中考政 治试题(word版,含答案).doc
- 吉林省2016年中考政治试卷及答案【word版】.doc
- 2016年吉林省中考政治试题及答案解析.doc
- 吉林2016年初中毕业生学业考试.doc
- 竞聘技校数学老师演讲.docx
- 2016年吉林省中考政治试题解析.doc
文档评论(0)