- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 语法的分析-2
自底向上的语法分析 所谓自底向上语法分析法就是从输入串开始,逐步进行“归约”,直至归约到文法的开始符号;或者说从语法树的叶子开始,步步向上“归约”,直至长出树根为止。 教学内容 自底向上语法分析的基本思想; 短语、直接短语和句柄的定义,以及如何利用语法树寻找短语、直接短语和句柄。 自底向上语法分析方法: 优先分析法 LR分析法 一、自底向上的语法分析思想 【自底向上(down - top)分析法的基本思想】自底向上语法分析的基本思想是从左向右扫描输入串,一边将输入符移进分析栈内,一边检查位于栈顶的一串符号是否与某个产生式的右部相同,若发现相同,就把栈顶的这串符号替换为相应产生式的左部的非终结符(这种替换就称为“归约”);若不相同,则继续移进输入符。并继续判断。重复这一过程直到输入串已到达串尾,而栈内恰好为给定文法的开始符号(假定未发现错误)时为止。此时表明分析成功,也就确认输入串是文法的句子。 这种分析方法也称为移进-归约分析法。 可归约串 可归约串:即每次归约的那串符号(是各个产生式的右部),称为“句柄”。 自底向上语法分析的关键: 在自底向上语法分析的过程中,最关键的问题就是如何识别句柄。 示例 【例1】设有以下文法G1[S]: S→aAcBe A→Ab|b B→d 分析输入串abbcde是否为文法的句子。 下面从建立语法树来看句子的推导过程。为了自底向上地构造输入串abbcde的语法树,首先从输入串出发,根据产生式规则自底向上地生长出这棵语法树,最后长出树根节点S。语法树的建立过程如图所示。 语法树 采用最右推导 在自底向上语法分析的过程中,考虑的是最右推导的逆过程。 例如,上述输入串abbcde的语法分析过程其实就是最右推导的逆过程。 最右推导: S ? aAcBe ? aAcde ? aAbcde ? abbcde 规范归约 规范推导:即最右推导。 规范归约:规范推导的逆过程。 规范句型:由最右推导推导出的句型。 结论 规范句型=分析栈内的内容+剩余的输入串 分析过程的不确定性 两种动作: 移进 归约 若在自底向上的分析过程中,语法分析程序每次只面临一种动作选择,要么移进,要么归约,则这个分析过程就是确定的,不会产生错误归约。 若在某一步的分析中,既可移进又可归约或者同时可选择两种归约动作,则语法分析程序的动作就是不确定的。 例如在前面的分析过程中,在第5步时栈中的符号串是#aAb,栈顶符号串b和Ab分别是产生式 A→Ab , A→b的右部,这时到底用A→Ab归约还是用A→b归约是自底向上分析要解决的关键问题。 存在的问题 在自底向上的分析过程中,存在两个问题: 移进_归约冲突 归约_归约冲突 二、句柄的定义 短语、直接短语、句柄的定义 【短语】若S?αAδ且A?β,则称β是相对于非终结符A的句型αβδ的短语。 【直接短语】若S?αAδ且A→β,则称β是相对于非终结符A的句型αβδ的直接短语(也称为简单短语)。 直接短语是某个产生式右部的符号串。 【句柄】位于句型最左边的直接短语称为该句型的句柄。 示例 【例2】文法G2[S]: S→AB A→bB A→Aa B→a B→Sb 求句型baSb的全部短语、直接短语、句柄。 讨论 句型baSb的子串b,a,ba,baS,S,aSb,……等都是句型的短语吗? 根据短语的定义,可由句型的推导过程中找出其全部短语和直接短语,以及句柄。 推导1. S ? AB ? bBB ? baB ? baSb 因为S ? baB 且 B→Sb 所以子串Sb是句型baSb的直接短语。 讨论 推导2. S ? AB ? ASb ? bBSb ? baSb 因为S ? bBSb 且 B→a 所以子串a是句型baSb的直接短语。 在推导2中,又因为S ? ASb 且 A ? ba 所以子串ba是句型baSb的短语。 结论 对于该句型,再没有其它能产生新的短语的推导,所以有结论: 句型baSb总共有三个异于自身的短语: Sb,a,ba 其中Sb,a为直接短语 其中a为句柄 利用语法树求短语、直接短语、句柄 根据定义寻找句型的所有短语、直接短语和句柄这种方法不直观,而且很难知道是否已穷尽所有情况。另一种方法是利用语法树。 子树:由语法树中的某一个结点连同其所有下层的后代结点组成的部分。 简单子树:只有单层分支(即父子两代)的子树。 语法树是四代的。 方法 短语:每棵子树的各端末节点从左向右排列形成一个短语。 直接短语:每棵父子两代的子树(即简单子树)的各端末节点从左向右排列形成一个直接短语。 句柄:位于语法树最左边
文档评论(0)