ch6-自底向上优先分析方法课件.pptVIP

  1. 1、本文档共72页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ch6-自底向上优先分析方法课件

第六章自下而上优先分析法;设 G =(VT,VN,S,P), α,β∈(VT∪VN)*, A→β∈P, αAw ?αβw 归约的过程是,已知αβw 和产生式 A→β,用产生式A→β左部 A 替换αβw 中的β,得到符号串αAw. 从输入符号串出发,每次从被归约的句型中找到一个产生式的右部,用其左部替换之,得到新的句型,直至归约到文法的开始符号。 ;【例】文法G[S] 对输入串 abbcde# 进行语法分析, 检查该符号串是否是该文法的正确句子。;S→aAcBe A→b A→Ab B→d;右句型;一个句型的最左直接短语称为该句型的句柄,句柄是规范归约的可归约串。 假定α是文法 G 的一个句子,称序列αn,αn-1,αn-2,…,α0是α的一个规范归约,如果此序列满足: 1)αn=α;α0为文法的开始符,即α0=S; 2)对任何i,0<i<n, αi-1是从αi经把句柄替换为相应产生式的左部符号而得到的。 如果文法G是无二义的,规范归约是最右推导的逆过程,规范归约也称最左归约,最右推导也称规范推导。 结论:对规范句型来说,句柄的后面不会出现非终结符。 因此,规范归约的实质是在移进过程中,发现栈顶呈现句柄时就用相应的产生式的左部符号进行替换。;对输入串 abbcde 的最右推导过程是: S?aAcBe?aAcde?aAbcde?abbcde。 用语法树表示如下图所示: ;用语法树表示规范归约过程如下图所示: 它与最右推导的逆过程相对应。 ;非形式地,一个符号串的“句柄”是和一个规则右部匹配的子串,而且把它归约到该规则左部的非终结符,代表了最右推导逆过程的一步。;形式的说,右句型(最右推导可得的句型)γ的句柄是一个与规则 A→β和γ中的一个位置有关的,从这个位置开始往右可找到β,用 A 代替β得到γ最右推导的前一个右句型,即 如果 S ? ?Aw ? ?βw, 那么,在 ? 后β是 ?βw 的句柄。 句柄右侧的 w 是未读入的终结符号。; “移进一归约”分析器使用一个栈和一个存放输入符号串w 的缓冲器。分析器的初始状态为: 栈 输入 动作 # w# ? ?工作过程:自左至右把串 w 的符号一一移进栈里,一旦栈顶形成句柄时,就进行归约。这种归约可能持续多次,直至栈顶不再呈现句柄为止。然后,继续向栈里移进符号,重复这个过程,直至最终形成如下格局: 栈 输入 #S # (分析成功接受) ;符号栈 输入串 动作 初态 # w# … … (移进、归约、出错) (中间过程) 终态 #S # (分析成功接受);对符号栈的使用有“移进”、“归约”、“接受”、“出错处理”等操作。;还有一个非常重要的事实,任何可归约串的出现必在栈顶,不会在栈的内部。对规范归约而言,这个事实是明显的。 规范归约是最左归约,这种“最左性”保证可归约串一定在栈顶。也正因为如此,先进后出栈在自下而上分析中是一种非常重要的数据结构。 ;6.1 自下而上优先分析法概述;6.2 简单优先分析法;2.简单优先文法 若一个文法满足: (1)在文法符号集V中,任意两个符号之间最多只 有一种关系成立; (2)在文法中任意两个产生式没有相同的右部. 则这样的文法为简单优先文法. ;3.简单优先分析法-优先分析算法 (1)根据优先文法构造优先关系矩阵; (2)存储文法产生式,并设符号栈S; (3)将输入符号串a1a2…an#依次逐个存入符号栈S中,直到 遇到栈顶符号ai的优先性下一个待输入符号aj时为止. (4)栈顶当前符号ai为句柄尾,由此向左在栈中找句柄的头符 号ak,即找到ak-1ak为止. (5)由句柄ak…ai在文法的产生式中查找右部为ak…ai的产生式, 若找到则用相应左部代替句柄,若找不到则为出错,这时可断定输入串不是该文法的句子. (6)重复(3)-(5)直至归约完输入串,栈中只剩下文法的开始符号为止.;6.3 算符优先分析法;6.3.1 方法概述;【例】文法G[E]:E→E+E | E*E | (E) | id;任何两个相邻终结符 a 和 b 之间的优先关系有三种: a · b a 的优先级低于 b a · b a 的优先级高于 b a =· b a 的优先级等于 b;优先关系矩阵(优先关系表、优先表);6.3.2 算符优先文法的定义;性质1:在算符文法中,任意句型都不含两个相邻的非终结符。;性质2:若 Ab 或 bA 出现在算符文法的句型 ? 中,其中A?VN ,b?VT,则 ? 中任何含 b 的短语必包含 A. ;2.终结符号间的优先关系的定义 设 G 是一个算符文法,对于任何终结符 a、b,算符优先关系 ·、=·、· 定义如下:;由语法树来说明优先关系;3.

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档