- 1、本文档共85页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 LR分 析 法 LR分析法是一种自下而上进行规范归约的语法分析方法,LR指“自左向右扫描和自下而上进行归约”。LR分析法比递归下降分析法、LL(1)分析法和算符优先分析法对文法的限制要少得多,对大多数用无二义的上下文无关文法描述的语言都可以用LR分析器予以识别,而且速度快,并能准确、及时地指出输入串的任何语法错误及出错位置。LR分析法的一个主要缺点是,若用手工构造分析器则工作量相当大,因此必须求助于自动产生LR分析器的产生器。 7.1.1 LR分析器的工作原理 我们知道,规范归约(最左归约,即最右推导的逆过程)的关键问题是寻找句柄。LR分析法的基本思想是:在规范归约过程中,一方面记住已移进和归约出的整个符号串,即记住“历史”;另一方面根据所用的产生式推测未来可能遇到的输入符号,即对未来进行“展望”。当一串貌似句柄的符号串呈现于分析栈的顶端时,我们希望能够根据所记载的“历史”和“展望”以及“现实”的输入符号等三方面的材料,来确定栈顶的符号是否构成相对某一产生式的句柄。 一个LR分析器实质上是一个带先进后出存储器(栈)的确定有限状态自动机。我们将把“历史”和“展望”材料综合抽象成某些“状态”,而分析栈(先进后出存储器)则用来存放这些状态;栈里的每个状态概括了从分析开始直到某一归约阶段的全部“历史”和“展望”资料。任何时候,栈顶的状态都代表了整个“历史”和已推测出的“展望”。LR分析器的每一步工作都是由栈顶状态和现行输入符号所惟一决定的。为了有助于明确归约手续,我们把已归约出的文法符号串也同时放在栈中(实际上可不必进栈)。栈的每一项内容包括状态s和文法符号X两部分。(s0,#)为分析开始前预先放入栈里的初始状态和句子括号;栈顶状态为sm,符号串X1X2…Xm是至今已移进归约出的文法符号串。 LR分析表是LR分析器的核心部分。一张LR分析表包括两部分:一部分是“动作”(ACTION)表,另一部分是“状态转换”(GOTO)表;它们都是二维数组。ACTION[s,a]规定了当状态s面临输入符号a时应采取什么动作,而GOTO[s, X]规定了状态s面对文法符号X(终结符或非终结符)时的下一状态是什么。显然,GOTO[s, X]定义了一个以文法符号为字母表的DFA。 每一项ACTION[s, a]所规定的动作是以下四种情况之一: (1) 移进:使(s, a)的下一状态s=ACTION[s, a]和输入符号a进栈(注:对终结符a来说, 下一状态s=GOTO[s, a]的值实际上是放在ACTION[s, a]中的),下一输入符号变成现行输入符号。 (2) 归约:指用某一产生式A→β进行归约。假若β的长度为γ,则归约的动作是去掉栈顶的γ个项,即使状态sm-γ变成栈顶状态,然后使(sm-γ,A)的下一状态s=GOTO[sm-γ,A] 和文法符号(非终结符)A进栈。归约的动作不改变现行输入符号,执行归约的动作意味着呈现于栈顶的符号串Xm-γ+1…Xm是一个相对于A的句柄。 (3) 接受:宣布分析成功,停止分析器的工作。 (4) 报错:报告发现源程序含有错误,调用出错处理程序。 LR分析器的总控程序本身的工作十分简单,它的任何一步只需按分析栈的栈顶状态s和现行输入符号a执行ACTION[s,a]所规定的动作即可。 例如,表达式文法G[E]如下,它对应的LR分析表见表7.13,则语句i+i*i的LR分析过程如表7.14所示: G[E]: (1) E→E+T (2) E→T (3) T→T*F (4) T→F (5) F→(E) (6) F→i 其中,sj指把下一状态j和现行输入符号a移进栈;rj指按文法的第j个产生式进行归约;acc表示分析成功;空白格为出错。 我们主要关心的问题是如何由文法构造LR分析表。对于一个文法,如果能够构造一张分析表,使得它的每个入口均是惟一确定的,则称这个文法为LR文法。对于一个LR文法,当分析器对输入串进行自左至右扫描时,一旦句柄呈现于栈顶,就能及时对它实行归约。 在有些情况下,LR分析器需要“展望”和实际检查未来的k个输入符号才能决定应采取什么样的“移进—归约”决策。一般而言,一个文法如果能用一个每步最多向前检查k个输入符号的LR分析器进行分析,则这个文法就称为LR(k)文法。 对于一个文法,如果它的任何“移进—归约”分析器都存在这样的情况:尽管栈的内容和下一个输入符号都已了解,但仍无法确定是“移进”还是“归约”,或者无法从几种可能的归约中确定其一,则该文法是非LR(1)的。注意,LR文法肯定是无二义的,一个二义文法决不会是LR文法;但是,LR分析技
您可能关注的文档
最近下载
- 麻醉中水电解质平衡管理.pptx
- 2025年新高考天津卷语文真题(解析版-).pdf VIP
- 腾势-腾势X-产品使用说明书-经典版(插混)-QCJ6490ST6HEV-腾势X插电式混动SUV用户手册20191212.pdf VIP
- 艾灸疗法ppt课件.ppt
- SHT 3225-2024 石油化工安全仪表系统安全完整性等级设计规范.docx VIP
- 装饰装修工装饰装修工试题二十二.doc VIP
- 装饰装修工装饰装修工试题六.doc VIP
- 三年级 上 音乐 苏教版.doc VIP
- 装饰装修工装饰装修工试题五.doc VIP
- 2024江西南昌凤凰城上海外国语学校教师招聘笔试模拟试题及答案解析.docx VIP
文档评论(0)