5第五章语法--自下而上试卷.ppt

  1. 1、本文档共257页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.1 自底向上分析的一般过程(移进-归约分析) 5.2 算符优先分析法 5.3 LR分析法 5.3.1 LR分析器 5.3.2 LR(0)项目族和LR(0)分析表的构造 5.3.3 SLR分析法 5.3.4 规范LR分析表的构造 5.3.5 LALR分析表的构造 5.3.6 二义性文法的应用 5.1.1 “移进-归约”分析方法 符号栈:存放文法符号 分析过程: (1)把输入符号一个个地移进栈中。 (2)当栈顶的符号串形成某个产生式的一个候选式时,在一定条件下,把该符号串替换 (即归约)为该产生式的左部符号。 (3)重复(2),直到栈顶符号串不再是“可归约串”为止。 (4)重复(1)-(3),直到最终归约出文法开始符号S。 例:分析符号串abbcde是否为如下文法的句子。 1) S?aAcBe 2) A?b 3) A?Ab 4) B?d (文法5.1) 最右推导 最右推导的逆过程(剪句柄) 最右推导的逆过程 确定句柄的步骤 确定句柄的步骤为:短语→ 直接短语→ 句柄 注意:短语、直接短语是相对于句型而言, 一个句型可能有多个短语、直接短语,句柄只能有一个。 依定义求,短语有8个: 1. E ? E,E ? (T+i)*i-F 则有短语:(T+i)*i-F 2. E ? T-F,T ? (T+i)*i 则有短语:(T+i)*i 3. E ? T*i-F,T ? (T+i) 则有短语:(T+i) 4. E ? (E)*i-F,E ? T+i 则有短语: T+i 5. E ? (E+i)*i-F,E ? T 则有短语:T 6. E ? (T+F)*i-F,F ? i 则有短语:第一个i 7. E ? (T+i)*F-F,F ? i 则有短语:第二个i 8. E ? (T+i)*F-T,T ? F 则有短语:F 其直接短语有4个: 1. E ? (E +i)*i-F, E? T 则有:T 2. E ? (T +F)*i-F, F? i 则有:第一个i 3. E ? (T +i)*F-F, F? i 则有:第二个i 4. E ? (T +i)*F-T, T? F 则有:F 句柄有1个:T 例:给定文法G[S]: S→aAcBe A→b A→Ab B→d 若有句型aAbcde,试问b是它的直接短语吗?它的短语是什么?句柄是什么? 所给句型aAbcde的语法树如图所示 由此语法树可知b不是句型的直接短语。句型的短语有: aAbcde,Ab,d 句柄是Ab。 例:设有文法: E→E+T|T T→T*F|F F→(E)|i 求句型T+i的所有短语和直接短语。 规范归约的定义 定义:假定?是文法G的一个句子,我们称句型序列 ?n,?n-1,…,?1,?0 是?的一个规范归约,如果序列满足: (1) ?n=?,?0=S (2) 对任何i(0i?n),?i-1是经过把?i的句柄替换为相应产生式的左部符号而得到的。 规范归约是关于?的一个最右推导(规范推导)的逆过程,因此规范归约也称为最左归约。 abbcde的一个规范归约是如下的句型序列:abbcde,aAbcde,aAcde,aAcBe,S。 规范规约的中心问题: 如何寻找或确定一个右句型的句柄 句柄的最左性 规范句型:最右推导得到的句型 规范句型的特点:句柄之后没有非终结符号 利用句柄的最左性:与符号栈的栈顶相关 不同的最右推导,其逆过程也是不同 例:考虑文法 E?E+E|E*E|(E)|id的句子id+id*id E?E+E?E+E*E?E+E*id?E+id*id?id+id*id E?E*E?E*id?E+E*id?E+id*id?id+id*id “移进-归约”方法的实现 必须解决两个问题: 确定右句型中将要归约的子串 如果这个子串是多个产生式的右部,如何确定选择哪个产生式 使用一个寄存文法符号的栈和一个存放输入符号串?的缓冲区。 分析开始时,先将符号#入栈,以示栈底; 将#置入输入符号串之后,以示符号串的结束。 从左向右把输入串?的符号一一移进符号栈,发现栈顶是一个可归约串时,就把这个串用相应的归约符号代替,重复进行移进-归约过程,直至栈中为“#S”,输入串为“#”,表示分析成功 例:对文法4.6的句子abbcde的规范归约过程 句子abbcde的规范归约过程 “移进-归约”分析方法的分析动作 移进:把下一个输入符号移进到栈顶。 归约:用适当的归约符号去替换这个串。 接受:宣布分析成功,停止分析。 错误处理:调用错误处理程序进行诊断和恢复。 分析过程中的动作冲突: “移进-归约”冲突 “归约-归约”冲突 自

文档评论(0)

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

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

1亿VIP精品文档

相关文档