编译原理第5章研讨.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 自底向上的语法分析 内 容 5.1 自底向上的分析方法简介 5.2 算符优先分析法 5.3 LR 分析 自底向上的分析方法简介 自底向上的语法分析器除“接受”外,一般有两种动作: 移进,将一个位于输入带上的最前面的终极符移入符号栈,符号栈中可以有符号,非终极符和一些其它的状态信息; 2. 归约,将栈顶的符号串α 利用产生式A→α归约为非终极符 自底向上的语法分析器有时也称为移进-规约分析器。 归约 (Reduction) 推导的相反过程叫归约 如果 S ? u1 ? u2 ? … un-1 ? un 是最右推导,则它的逆向过程 : un? un-1? …? u2 ? u1? S, 被称为规范规约/ 最左归约。 规约的例子 自底向上的语法分析存在中的 问题1 如果句型存在有多个子串与一产生式右部相匹配,该选择哪一个进行规约? 回顾: 短语与句柄 w 是 uAv 相对于 A的短语,当且仅当 A ?+w, 这是一棵根为A的子树。 w是 uAv 相对于 A的直接短语,当且仅当 A ? w, 这是一棵高度为 1的子树。 句柄是句型的最左直接短语。 句柄? 是否匹配产生式右部的的最左子串一定是句柄? 句柄的例子 问题2: 如何识别句柄? 试探。 当子串与某个产生式的右部匹配时,将其视为句柄,如果分析失败,则 回溯。 对文法做一些限制,这样可以根据规则来识别句柄,例如算符优先文法 (Operator Precedence Grammar, OPG ) OPG的基本思想 每一个运算符均有其优先级。 当两个运算符相邻,则优先级高的先计算。 表达式中所的操作数均被运算符隔开。 运用算符优先级的例子 G[E]:E?E+E | E-E | E*E | E/E | (E) | i 运用算符优先级的例子 算符文法与算符优先文法 定义5.1 若文法G的产生式右部不含两个VN符相邻的情况,则称G为算符文法.G的VT符被称为算符 可以证明,算符文法不会含有两个VN符相邻的句型 常见语言不一定是算符文法,但可容易地对其进行改造。例 PASCAL中的循环语句: OPG定义 G中没有 ?产生式 (如: X??) ,也没有含连续的非终极符的产生式。 对于任意的终极符对 (a, b), 最多只有下面的一种关系 a < b, a = b, a > b, 它们分别表示a的优先级低于,等于,高于 b的优先级。 优先性的实质 a b: a比b后归约 a = b:a和b同时归约 a b:a比b先归约 什么时候 a = b ? a = b, 当且仅当a 和 b 同时归约 于是, a 和 b 应该是在同一个句柄中相邻。 什么时候 a b? a b, 当且仅当 a 先于 b归约。 a 在位于b 前的R的短语中。 a 在短语R的最右边:. R?+… a or R?+… aQ 于是a和b 是邻居。 R短语的根, 应该是b 的邻居或者b跟随于 R。 R 和 b 在同一个产生式中, 如: P ? … Rb …, 因为在OPG中没有后继的非终极符。 什么时候 a b? 综上所述, 我们有: a b 当且仅当 a是b的哥哥的最小的子孙。 什么时候 a b 同样地, 我们有: a b当且仅当 b是a 的弟弟的最大的子孙。 优先级的总结 a = b,当且仅当在G中有一产生式,形如: P?…ab… 或 P?…aYb… a b,当且仅当在G中有一产生式,形如:P ? …aR… 且 R?+b … 或R ??+ Qb … a b,当且仅当在G中有一产生式,形如: P ? … Rb … 且 R?+… a 或 R ??+… aQ 计算a = b 计算 a b 计算 Firstvt 在定义中包括了 “?+ ”, 由此我们可以想到,这是闭包计算。 计算a b 定义Lastvt (R) 为 { a | R ?+ … a 或R ?+ …aQ}. 计算优先关系的例子 运算符的优先级 于是我们可得到所有非终极符的优先级。 例如, 对 E?E+T 和 Lastvt (E), 有: + +, * +, ? +, ) +, id + 运算符的优先级 算符优先分析的算法 栈顶符号 输入符号, 将输入符号压入栈中; 栈顶符号 = 输入符号, 将输入符号压入栈中; 栈顶符号 输入符号, 找到栈中句柄,并用左部替代它。 OP 分析的例子 OPG 与规范归约的比较 “id+id*id” 的语法树 素短语(Prime Phrase) 素短语 算符优先分析的句型具有形式 w=#N1a1N2

文档评论(0)

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

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

1亿VIP精品文档

相关文档