- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 假设文法是LR(1)的,在IK中{a1} ∩ {a}=Φ ,在IK中{a2} ∩ {a}=Φ ,显然在在IK,j中({a1} ∪ {a2} )∩ {a}=Φ 。这说明合并同心集后,不可能有移进-归约冲突。 2. 同心集合并后,用LALR(1)分析含有错误的句子时,LALR(1)方法发现错误的时间晚于LR(1)发现错误的时间。因为LALR(1)方法要多做不必要的归约。但能准确地找出错误的位置。 任何一个二义性文法决不是LR类文法,与其对应的LR分析表一定含有多重定义的元素。但对于某些二义性文法,若在其含有多重定义的分析表中加入足够的无二义性的规则(给出优先性和结合性的规定),则会构造出比相应非二义性文法更优越的LR分析器。 讨论:如何在二义性文法的LR分析表中加入足够的无二义性规则来分析二义性文法所定义的语言。 例如,算术表达式的二义性文法: E ∷=E+E|E*E|(E)|i,相应无二义性文法为: §6.二义性文法在LR分析法中的应用 E ∷=E+T|T T ∷=T*F|F F ∷=(E)|i 现构造算术表达式二义性文法的LR(0)项目集规范族: I8 其中:I1, I7和I8存在移进-归约冲突: 对于I1:因为FOLLOW(E’) ∩ {+,*}={#} ∩ {+,*}= Φ,即遇到“#”归约,遇“+”和“*”则移进。 对于I7 和I8 :因为FOLLOW(E) ∩ {+,*}={#,+,*,)} ∩ {+,*} ≠Φ ,因而I7 和I8 的冲突不能用LR(1)方法解决,二义性的文法也不能用LR(K)方法解决。但是,可以用+,*的优先级和结合性解决这类冲突。 若规定“*”优先级高于“+”的优先级,且服从左结合,那么: 在I7中,由于“*”优先于“+”,所以状态7面临“*”则移进;又因为“+”服从左结合,所以状态7面临“+”则用E ∷=E+E归约。 在I8中,由于“*”优先于“+”,且“*”服从左结合,因此状态8面临“+”或“*”都用E ∷=E*E归约。 构造该二义性文法的分析表如下: ? ? ? ? ACTION GoTo + i * ( ) # E 0 ? S3 ? S2 ? ? 1 1 S4 ? S5 ? ? acc ? 2 ? S3 ? S2 ? ? 6 3 r4 ? r4 ? r4 r4 ? 4 ? S3 ? S2 ? ? 7 5 ? S3 ? S2 ? ? 8 6 S4 ? S5 ? S9 ? ? 7 r1 ? S5 ? r1 r1 ? 8 r1 ? r2 ? r2 r2 ? 9 r3 ? r2 ? r3 r3 ? 注: ①二义性文法的LR分析表所含状态数比相应的非二义性文法的LR分析表所含的状态数要少。 ② 二义性文法规定了优先关系和结合性后的LR分析速度比相应的非二义性文法的LR分析速度要快。 §7. 小结及举例 一、小结 1. LR分析法是一种规范归约方法,关键部分是构造LR分析表 对LR(0)或SLR(1)分析表,构造LR(0)项目集规范族,而对LR(1)或LALR(1)分析表,则构造LR(1)项目集规范族。 构造识别文法规范句型活前缀的DFA 将DFA转换成相应的LR分析表 四种分析表的构造基本相同,仅对含归约项目的项目集,构造分析表的元素有所不同,文法都要拓广。 2. LR文法的判别 文法是否是二义性的 根据项目集中是否含有冲突项目判断 3. LR类中4种文法的关系: LR(0) SLR(1) LALR(1) LR(1) 是LR(0)文法一定是SLR(1)文法或LALR(1)文法或LR(1)文法。 是SLR(1)文法一定是LALR(1),反之不一定成立。 是LALR(1)文法一定是LR(1),反之不一定成立。 4. 问题: 构造DFA 构造分析表及熟悉对给定句子的分析过程 LR类文法的判别 熟悉对给定优先级和左结合性的二义性文法构造分析表的处理方法。 二、例子 1 LR(0),SLR(1),LR(1)及LALR(1)方法有何共同的特征?它们的本质区别是什么? 答: 共同特性:用规范归约的方法寻找句柄,即LR分析器的每一步工作都是由栈顶状态和当前输入符号所唯一确定的。 本质区别:
文档评论(0)