- 1、本文档共77页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章节 LR 分析法.ppt(完整)
【学习目标】 【学习指南】 【重难点】 4) 构造识别活前缀的DFA 首先我们用I0表示这个DFA的初态,它预示着整个分析过程的开始,并且期待着将给定的输入串逐步归约为文法的开始符号S 。 或者反过来说,我们所期待的是,从使用产生式S→S开始,能够逐渐推导出所给定的输入串。 因此,我们应将项目S →.S列入项目集I0之中。换言之,也就是我们正期待将要扫描的输入串正好就是能由S推导出的任何终结符串。 然而,我们不能从输入串中直接读出非终结符号S。 因此我们也应将项目S→.A和S→.B加入I0中。由于A和B同样是非终结符,所以也应将A→.aAb和A→.c和B→.aBb, B→.d加入I0中。 构造LR(0)分析表的算法为: 例如: 有算术表达式文法G[E],构造其LR(0)项目规范簇和SLR(1)分析表。G[E]: E→E+T?T T→T*F?F F→(E) ? i 3、解决冲突 7.4 LR(1) 分析 本节介绍比SLR(1)功能更强的LR(1)分析法。 例7.4:有下列文法G′,构造识别文法G′的活前缀的有限自动机。 (0) S′→S (1) S→aAd (2) S→bAc (3) S→aec (4) S→bed (5) A→e 如图7.7所示,可以发现在项目集I5和I7中存在移进和归约冲突。 I5:S→ae·c I7:S→be·d A→e· A→e· 由于用SLR(1)方法解决动作冲突时,对于归约项目A→α·,只要当前面临输入符为a∈FOLLOW(A)时,就确定采用产生式A→α进行归约,但是如果栈中的符号串为βα,归约后变为βA,再移进当前符a,则栈里变为βAa,而实际上βAa未必为文法规范句型的活前缀。 这说明从S′出发不能用最右推导(规范推导)推出aAc句型,所以aAc不是该文法的规范句型。回顾LR分析过程,若输入符号串是所给文法的句子,那么分析过程的任何时刻在文法符号栈中的符号和剩余的输入串符号合起来总是构成该文法的规范句型。 若[A→α·Bβ]∈项目集I, 则[B→·γ](B→γ为一产生式)也包含在I中。 7.4.1 LR(1)项目集族的构造 一个LR(1)项目可以看成两个部分组成,一部分和LR(0)项目相同部分我们称它为心,另一部分为向前搜索符集合。如让S′→·S,#属于初始项目集中,把#号作为向前搜索符,表示活前缀为γ(若γ是有关S产生式的某一右部)要归约成S时,必须面临输入符为#号才行。因此对初始项目[S′→·S,#]求闭包后再用转换函数逐步求出整个文法的LR(1)项目集族。具体构造步骤如下: (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→αBβ归约时的向前搜索符,而现在β为ε,就等于用A→αB归约,向前搜索符为α,那么用A→αB归约前,必须先用产生式B→γ归约成B,因此,B的向前搜索符时也应为α。 对文法G′的LR(1)项目集族的构造仍以[S′→·S,#]为初态集的初始项目,然后对其求闭包和转换函数,直到项目集不再增大。 这样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)分析表的构造大部分相同,仅对归约项目的归约动作取决于该归约项目的向前搜索符集,只有当面临输入符属于向前搜索符的集合,才做归约动作,其它情况均出错。具体构造过程如下: 若已构造出某文
您可能关注的文档
- 第7章节 接口和抽象.ppt
- 第7章节 采样控制系统分析基础.ppt
- 第7章节 (稳恒磁场)习题课.ppt
- 第7章节 4指数平滑法.ppt
- 第7章节 AC-AC变换技术.ppt
- 第7章节 ADC和触摸屏接口.ppt
- 第7章节 Brown运动.ppt
- 第7章节 抽样推断.ppt
- 第7章节 GPS网平差.ppt
- 第7章节 Internet.ppt
- 2025汽车技师职业鉴定考前冲刺练习试题带答案详解(精练).docx
- 新课标高考总复习数学51第六章第5课时数列的综合应用84.pdf
- 鲁教版八年级化学第五单元 第三节 化学反应中的有关计算.pptx
- 二手房贷款购买房屋租赁权保障合同.docx
- 2025汽车技师职业鉴定考前冲刺练习试题精选附答案详解.docx
- 2025汽车技师职业鉴定考前冲刺练习试题(精练)附答案详解.docx
- 人工智能教育伦理准则在远程教育中的实施与效果分析教学研究课题报告.docx
- 2025汽车技师职业鉴定考前冲刺练习附参考答案详解AB卷.docx
- 2025汽车技师职业鉴定考前冲刺练习题及参考答案详解【名师推荐】.docx
- 2025汽车技师职业鉴定考前冲刺练习题及完整答案详解【历年真题】.docx
文档评论(0)