自下而上语法LR试卷.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LR(K)方法概述 一种自下而上的语法分析方法。 当前最广义的无回溯的“移进- 归约”方法。 根据栈中的符号串和向前查看的k(k?0)个输入符号,就能唯一确定分析器的动作是移进还是归约,以及用哪个产生式进行归约。 优点: 文法适用范围广;识别效率高;查错能力强;可自动构造。 逻辑组成: 总控程序+LR分析表 分析表的四种构造方法: LR(0),SLR(1),规范LR,LALR 总控程序根据分析表的内容来决定其下一步的处理动作,分析表是根据具体的文法按某种规则构造出来的。 LR方法:根据具体文法的分析表对输入串进行分析处理。 LR分析过程:在总控程序的控制下,从左到右扫描输入符号串,根据分析栈中的状态和当前输入符号,按分析表中的内容完成相应的分析工作。 LR分析表的构成 分析表的动作部分:ACTION[Si,aj]表示当分析状态栈的栈顶为Si,输入符号为aj时应执行的动作; 表中GOTO[Si,Xj]指出栈顶状态为Si,碰到文法符号为Xj时应转到的下一状态; 动作有下列四种: 移进(Sn),归约(R),接受(A),报错(E) 利用分析表分析符号串 (a) LR文法:对一个文法,如果能够构造一个分析表,且它的每个入口均是唯一的 如何构造LR分析表? 活前缀和可归前缀 前缀:指从任意符号串x的末尾删除0或多个符号后得到的符号串,如u、uni、universi ty都是university的前缀。 活前缀:设λβt是一个规范句型,其中β表示句柄,t∈Vt*,如果λ β=u1u2…ur,那么称符号串u1u2…ui(其中1≤i≤r)是句型λ βt的活前缀。 可归前缀:含有句柄的活前缀u1u2…ur称为可归前缀。 有文法G∶E→T|E+T|E-T, T→i|(E), 找规范句型E+(i-i)的活前缀和可归前缀。 解:首先画出E+(i-i)的语法树可找出第一个i是句柄,那么 λβ=E+(i ,t=-i) 因此活前缀为:E,E+,E+(,E+(i,其中E+(i是可归前缀。 活前缀意味着,当前还未形成句柄,或刚刚形成句柄。 在活前缀的右边添上一些终结符号后,总可以构成一个规范句型。 LR识别过程中,栈里面的符号就是一个活前缀。栈里面的符号添加上适当的终结符号串就可以得到一个句型。 在任何时候,只要输入串已扫描过的部分能构成一个活前缀,则意味着所扫描过的这一部分没有错误。 活前缀和句柄的关系 1. 活前缀不含有句柄的任何符号; 2. 活前缀含有句柄的部分符号; 3. 活前缀已含有句柄的全部符号。 LR(0)项目 LR(0)项目的定义: 文法的每一个产生式的右部添加一个圆点(.),则构成文法的一个 LR(0)项目。 直观地,一个项目指明了在分析过程的某一时刻,已经看到的一个产生式的多少。 LR(0)项目 A → xyz的LR(0)项目: A → .xyz A → x.yz A → xy.z A → xyz. 项目集:若干个项目组成的集合称为项目集。 例如:对于上述产生式的4个项目即构成一个项目集。 后继符号:在项目中紧跟在符号“·”后面的符号称为该项目的后继符号。 后继符号表示下一时刻读到的符号。 后继符号有多种,据此将项目分为多种: 后继符号为终结符: A?α· aβ, 称为移进项目; 后继符号为非终结符:A?α· Bβ, 称为待约项目; 后继符号为空:即圆点在最右边A?α· , 称为归约项目; 归约项目的左边是文法的开始符号S?α·, 称为接受项目。 后继符号集:项目集中各项目的后继符号所组成的集合称为后继符号集。 例如:项目集{ E ? E ·+T , F ? · i }的后继符号集为{+,i} 可以由文法的所有LR(0)项目,构造识别文法所有活前缀的FA。在此构造过程中,需要对文法进行拓广,并利用CLOSURE函数和GO函数。 LR(0) 项目集规范族定义 定义:构成识别一个文法活前缀的DFA的项目集(状态)的全体称为这个文法的LR(0) 项目集规范族。 文法G的拓广文法 文法G[S]的拓广文法: G’[S’]=G[S]+{S’ → S} 拓广的原因:使得语法分析有唯一的“接受”项目:S’ → S. 项目集I的闭包CLOSURE(I) 设I是文法G的任一项目集,则定义和构造CLOSURE(I)的规则如下: ① 属于I的任何项目也属于CLOSURE(I); ② 若A → α .Bβ 属于CLOSURE(I),那么,对于任何关于B的产生式B→γ ,项目B→ .γ 也属于CLOSURE(I); ③ 重复执行以上两步,直到CLOSURE(I)不再增大为止。 项目集闭包的例子 文法: 0. E ’→E 1. E→E+T 2. E→T 3. T→T*F 4.

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档