- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
四种LR分析表的构造方法: (1) LR(0)表的构造方法: 该法局限性很大, 但它是建立一般LR分析表的基础。 (2)SLR(1)表(简单LR表)的构造方法: 该法较易实现又极有使用价值。 (3)LR(1)表(规范LR表)的构造方法: 该法适用于大多数CFG文法,但分析表 体积庞大。 (4)LALR表(向前LR表)的构造方法: 该法介于SLR(1)和LR(1)之间。 3.5.2 LR(0)分析表的构造 希望仅由一种只概括“历史”资料而不包含推测性“展望”材料的简单状态就能识别呈现在栈顶的某些句柄,LR(0)项目集就是这样一种简单状态。 讨论LR分析法时,需要定义一个重要概念,这就是文法规范句型的活前缀。字的前缀是指该字的任意首部,例如,字abc的前缀有ε、a、ab或abc。 所谓活前缀是指规范句型的一个前缀, 这种前缀不含句柄之后的任何符号。 在LR分析过程中的任何时候,栈里的文法符号X1X2…Xm应构成活前缀。把输入串的剩余部分匹配于其后应成为规范句型(如果整个输入串确为一个句子的话)。因此,只要输入串的已扫描部分保持可归约成一个活前缀,就意味着所扫描的部分没有错误。 对于文法G[S],首先要构造一个NFA,它能识别G[S]的所有活前缀,这个NFA的每个状态称为一个项目。 项目:文法G[S]中每一产生式的右部添加一个圆点,称为文法G[S]的一个LR(0)项目, 简称项目。 例如,产生式A→XYZ对应四个项目: A→·X Y Z A→ X·Y Z A→ X Y·Z A→ X Y Z· 注意,产生式A→ε只对应一个项目A→· 一个项目指明了在分析过程的某个时刻看到产生式的多大一部分。 通过使用文法的项目可构造一个NFA来识别文法的所有活前缀,再用子集法把识别活前缀的NFA确定化,使之成为一个以项目集合为状态的DFA,这个DFA就是建立LR分析算法的基础。 识别一个文法活前缀的DFA的项目集的全体称为这个文法的LR(0)项目集规范族。这个规范族提供了建立一类LR(0)和SLR(1)分析器的基础。 圆点在最右端的项目, 如A→α·, 称为一个归约项目; 对文法的开始符号S‘的归约项目, 如S’→α· ,称为接受项目; 形如A→α·aβ的项目(a为终结符),称为移进项目; 形如A→α·Bβ的项目(B为非终结符),称为待约项目。 1. LR(0)项目集规范族的构造 可用ε_CLOSURE构造一个文法的LR(0)项目集规范族。 首先构造文法G[S]的拓广文法G[S],它包含整个G[S]并引进一个不出现在G[S]中的非终结符S,同时加进了一个新产生式S→S。这样,仅含项目S→S·的状态是唯一的接受状态。 假定I是文法G‘[S’]的任一项目集, 定义和构造CLOSURE(I)的方法: (1)I的任何项目都属于CLOSURE(I); (2)若A→α·Bβ属于CLOSURE(I), 则对任何关于B的产生式B→γ, 其项目B→·γ属于CLOSURE(I)。 (3)重复(1)~(2)直至CLOSURE(I)不再 增大为止。 假定I是文法G‘[S’]的任一项目集,X是一个文法符号(终结符或非终结符),则状态转换函数GO(I,X)的定义为 GO(I,X)=CLOSURE(J) 其中J={任何形如A→αX·β的项目 | A→α·Xβ属于I}。 若I是对某个活前缀γ有效的项目集(状态), 则GO(I,X)是对γX有效的项目集(状态)。 通过CLOSURE(I)和GO(I,X)构造拓广文法G[S]的LR(0)项目集规范族的方法: (1)求出I的闭包CLOSURE(I) (2)先用GO(I,X)求出J, 再对J求其闭包CLOSURE(J)。 以此类推, 最终可构造出拓广文法G[S]的LR(0)项目集规范族。 2. LR(0)分析表的构造 若文法G[S]的拓广文法G‘[S’]的活前缀识别自动机中的每个状态(项目集)不存在下述情况:既含移进项目又含归约项目或含有多个归约项目,则G[S]是一个LR(0)
您可能关注的文档
- 《IT行业分析报告》-公开·课件设计.ppt
- 《IT行业分析报告8366997》-公开·课件设计.ppt
- 《IT行业分析报告56063009》-公开·课件设计.ppt
- 《IT行业调研报告》-公开·课件设计.ppt
- 《IT技术给未来生活的改变》-公开·课件设计.ppt
- 《IT认证培训满意度调查研究报告》-公开·课件设计.ppt
- 《Java JDK 6学习笔记 第12章》-公开·课件设计.ppt
- 《iWARP Ethernet》-公开·课件设计.ppt
- 《Java JDK 6学习笔记——简体版 第01章》-公开·课件设计.ppt
- 《Java JDK 6学习笔记——简体版 第02章》-公开·课件设计.ppt
文档评论(0)