- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]编译原理 第七章
第7章 LR分析 7.1 LR 分析概述 一个LR分析器由3个部分组成: 总控程序,也可以称为驱动程序。对所有的LR分析器总控程序都是相同的。 分析表或分析函数,不同的文法分析表将不同,同一个文法采用的LR分析器不同时,分析表将也不同,分析表又可分为动作表(ACTION)和状态转换(GOTO)表两个部分,它们都可用二维数组表示。 分析栈,包括文法符号栈和相应的状态栈,它们均是先进后出栈。 分析器的动作就是由栈顶状态和当前输入符号所决定(LR(0)分析器不需向前查看输入符号)。LR分析器工作过程示意图如图7.1所示。 7.2 LR(0)分析 LR(0)分析表构造的思想和方法是构造其它LR分析表的基础。 例6.1文法G[S]为: (1) S→aAcBe (2) A→b (3) A→Ab (4) B→d 对输入串abbcde#用自底向上归约的方法进行分析,当归约到第5步时栈中符号串为#aAb,我们采用了产生式(3)进行归约而不是用产生式(2)归约,而在第3步归约时栈中符号串为#ab时却用产生式(2)归约,虽然在第2步和第5步归约前栈顶符号都为b,但归约所用产生式却不同,其原因在于已分析过的部分在栈中的前缀不同,也就是我们在LR分析中引进的状态栈的栈顶状态不同,为了说明这个问题我们先在表7.1中给出例6.1文法G[S]的LR(0)分析表,在表7.2给出对输入串abbcde#的分析过程,并引进一些概念和术语。 表 7.1符号说明: Si:移进,将状态i和输入符进栈 ri:归约,用第i个产生式归约,同时状态栈与符号栈退出相应个符号,并把GOTO表相应状态和第i个产生式的左部非终结符入栈。 7.2.1 可归前缀和子前缀 为了在以后的LR分析中不致引起混淆,现对原文法进行拓广。若原文法G的开始符号为S,在G中加产生式S′→S后得新的文法G′,则称G′为原文法G的拓广文法,而S′为拓广后文法G′的开始符号。对文法进行拓广的目的是为了对某些右部含有开始符号的文法,在归约过程中能分清是否已归约到文法的最初开始符,还是在文法右部出现的开始符号,拓广文法的开始符号S′只在左部出现,这样确保了不会混淆。 若对例6.1文法G[S]的每条产生式编上序号用[i]表示加在产生式的尾部,使产生式变为: S→aAcBe[1] A→b[2] A→Ab[3] B→d[4] 但[i]不属产生式的文法符号,对输入串abbcde进行推导时把序号也带入,则最右推导过程为: 7.2.3 活前缀及其可归约前缀的一般计算方法 对一个任给的上下文无关文法需要有确定的办法来求出它的所有活前缀和可归前缀才能构造其识别该文法活前缀的有限自动机。 定义 7.2 设G是一个上下无关文法,对A∈VN有: LC(A)={α|S’ αAω,α∈V*, ω∈VT*},其中S’是G的拓广文法G’ R 的开始符号。 LC(A)表示在规范推导中在非终结符A左边所出现的符号串集合,根据它就能找出不包含句柄部分的所有活前缀。 推论:若文法G中有产生式B→γAδ 则有 LC(A)?LC(B).{γ} 因为对任一形如αBω的句型必有规范推导:S’ αBω αγAδω,即对任一个α∈LC(B),定有αγ∈LC(A)。 规定:LR(0)CONTEXT(A→β)=LC(A).β(加上产生式右部,得到包含句柄的活前缀)。 例6.1 文法包含句柄的活前缀。 包含句柄的活前缀也就是可归约前缀,将它们展开就得到所有的活前缀。 7.2.4 LR(0)项目集规范族的构造 为了由文法的产生式直接构造识别活前缀和可归前缀的有限自动机,回顾LR分析方法是自左向右扫描源程序,当扫描过的部分形成句柄时则归约,用相应非终结符替换句柄后再继续扫描,当已形成新句柄时再归约,重复这样的过程一直归约到文法的开始符号为止。只要已扫描过的部分保持可归约成一个规范句型的活前缀,那就意味着所扫描过的部分是正确的。为此,我们把构造识别文法所有活前缀的有限自动机NFA的每个状态由下面定义的一个“项目”构成。(1) LR(0)项目 在文法G中每个产生式的右部适当位置添加一个圆点构成项目。 例如,产生式S→aAcBe对应有6个项目: [0] S→·aAcBe [1] S→a·AcBe [2] S→aA·cBe [3] S→aAc·Be [4] S→aAcB·e [5] S→aAcBe· 一个产生式可对应的项目个数是它的右部符号长度加1,值得注意的是对空产生式A→ε仅有项目A→·。 因为ε不是一个实际输入符号,所以它的对应项目为A→·,绝对不能写成A→·ε进而又有A→ε·。 每个项目的含义与圆点的
您可能关注的文档
最近下载
- CYX-QEHP-39新改扩建项目环境影响控制程序B0(工厂体系文件模板).doc VIP
- 03~04_项目融资模式之BOT项目.ppt VIP
- 团章考试题及答案.doc VIP
- 2025年中考真题作文解读:此刻,你不一样(威海)(写作指导+例文展示+名师点评).docx
- 小学一年级学习计划..doc VIP
- 包头市户外广告和牌匾设置技术标准标准DB 1502T006—2020.pdf
- 网络直播带货主播能力模型构建研究.docx VIP
- 淮阴工学院班主任工作手册.doc VIP
- 2024年新改版教科版一年级上册科学全册教案教学设计(新教材专用).docx
- 2025道德与法治二年级上册全册核心素养教案教学设计.docx
文档评论(0)