06-自下而上的语法分析.ppt

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
06-自下而上的语法分析

第六章 自下而上的语法分析 主要内容 本章学习目标 自下而上语法分析概述 简单优先分析 算符优先分析 小结本章 重点习题解析 思考&练习 相关术语的回顾(英文版) 本章学习目标  一.学习目标 理解语法分析器的功能 理解算符优先分析方法 二.课程安排 2学时 自下而上语法分析概述 As the name suggests, bottom-up parsing begins with a string and tries to backwards to the start symbol by applying the productions in reverse. 也称为移进--归约分析 6.1自下而上语法分析概述 如名字如示,自下而上语法分析试图将一个字符串反向归约至开始符号。 自下而上语法分析比自上而下语法分析更有效率,对语法的限制更少 6.1自下而上语法分析概述 一、基本思想 自下而上语法分析就是对输入串自左向右,逐步进行扫描,并将输入符逐个移入一个后进先出的栈中,边移入边分析,一旦栈顶符号串形成一个句型的句柄,就用该产生式的左部非终结符代替相应右部的文法符号串。这一步叫归约。重复这一过程直到归约为文法的开始符号。自下而上语法分析过程实际就是一个不断进行直接归约的过程。 二、自下而上语法分析法 1、优先分析法(简单优先分析法和算符优先分析法) 2、LR分析法 自下而上语法分析概述 研究的关键问题 1、如何确定归约的句柄? 2、找出的句柄,应直接归约到哪一个非终结符号? 自底向上的语法分析 算法应考虑的问题 算法是否能够终止? 算法是否快速? 算法是否能够处理所有的情况? 在每一步中如何选择子串进行归约? 自下而上语法分析的策略:移进-规约分析; 移进就是将一个终结符推进栈 归约就是将0个或多个符号从栈中弹出,根据产生式将一个非终结符压入栈 移进-归约过程是自顶向下最右推导的逆过程(规范归约) 我们如何决定什么时候移进,什么时候规约? 考虑 int | * int + int 我们可以用 T ? int进行归约,而得到 T | * int + int 致命错误: 无法规约到开始符号 E 直觉: Want to reduce only if the result can still be reduced to the start symbol 一般的移进-归约策略: 若句柄在栈顶出现,则归约 否则移进 句柄(Handles):句型的最左直接短语 回顾 从句型E+T*F+i的语法树中找短语、直接短语和句柄 答:短语(该句型中的某一部分) E+T*F+i —— 相对于E E+T*F —— 相对于E T*F —— 相对于T i —— 相对于F 直接短语: S* =?A?且A?β则称β是句型 ??? 相对于产生式A??的一个直接短语。对于上述句型T*F, i为直接短语 句柄: 一个句型的最左直接短语称之为该句型的句柄。上述句型T*F为句柄(最左直接短语)。 自下而上的分析算法 优先分析法 简单优先分析法 算符优先分析法 LR分析(将在下一章中介绍) 6.2简单优先分析法 简单优先分析法的基本思想:按照文法符号(包括终结符和非终结符)的优先关系确定句柄。示例见下页 算符优先分析法的基本思想:只考虑算符(终结符)之间的优先关系来确定句柄。 某些文法具有“算符”特性 表达式运算符(优先级、结合性) 人为地规定其算符的优先顺序,即给出优先级别和同一级别的结合性 优先关系 优先关系 X=Y ? 文法G中存在产生式A→...XY... XY? 文法G中存在产生式A→...XB..., 且B Y... XY? 文法G中存在产生式A→...BD..., 且B ...X,D Y... 如何确定两个文法符号之间的优先关系? 简单优先文法的定义 满足以下条件的文法是简单优先文法 (1)在文法符号集V中,任意两个符号之间最多只有一种优先关系成立。 (2)在文法中任意两个产生式没有相同的右部 (3)不含空产生式 6.3算符优先分析 某些文法具有“算符”特性 表达式运算符(优先级、结合性) 人为地规定其算符的优先顺序,即给出优先级别和同一级别的结合性 只考虑算符之间的优先关系来确定句柄 如何确定算符优先关系? (1)i的优先级最高 (1) ?优先级次于i,右结合 (2)*和/优先级次之,左结合 (3)+和-优先级最低,左结合 (4)括号‘(’,‘)’的优先级大于括号外的运算符,小于括号内的运算符,内括号的优先性大于外括号 (5)#的优先性低于与其相邻的算符 算符文法的定义 定义 如果不含空产生式的上下文

文档评论(0)

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

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

1亿VIP精品文档

相关文档