- 1、本文档共54页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章自底向上优先分析课件
第六章自底向上优先分析 第六章 自底向上优先分析 所谓自底向上分析法,又称自下而上分析法,就是从输入串开始,逐步进行“归约”,直到归约到该文法的开始符号为止。或者说,从语法树的末端开始,步步向上“归约”,直到根结。 自下而上分析基本问题 规约 自下而上分析法实质上是一种“移进/归约”法。即用一个寄存符号的先进后出栈,把输入符号一个一个地移进栈里;当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。 例: G[S],其产生式如下:????①S→aAcBe, ②A→b ????③A→Ab, ④B→d???对输入串abbcde#进行分析。解:利用最右推导得:??? S=aAcBe=aAcde =aAbcde =abbcde 规约分析过程: abbcde →aAbcde →aAcde →aAcBe →S 把输入串abbcde规约到S。规约过程:首先把 a进栈,然后把b进栈,因为A b是一条规则,于是把栈顶的b规约成A;再让第二个b进栈,这时栈的最顶端的两个符号Ab,因A Ab是一条规则,于是又把栈顶的Ab规约为A。此时栈里只有两个符号aA了。如此反复整个“移进-规约”过程共10步,每一步符号栈的变化情形如上图所示。 在上图中共进行了4次规约。每实现一步规约都是把栈顶的一串符号用某个产生式的左部符号来代替。后面我们权且把栈顶上的这样一串符号称为“可规约串”,在第5)步中,如果用规则2)则无法得到最后结果,因此需要精确定义“可规约串”,这是自下而上分析的关键问题。 (1)最右推导过程见下图 (2)最左归约过程见下图 语法分析树的生成 a b b c d e 自下而上分析的中心问题是:怎样判断栈顶的符号串的可规约性,以及如何规约。这是第6章(算符优先分析)和第7章(LR分析法)将讨论的问题。各种不同的自下而上分析法的一个共同特点是,边输入单词符号(移进符号栈),边规约。也就是在从左到右移进输入串的过程中,一旦发现栈顶呈现可规约串就立即进行规约。 规范归约简述 令G是一个文法,S是文法的开始符号,假定:(1)αβδ是文法G的一个句型; (2)如果有 S ?αAδ 且 A?β,则称β是句型αβδ相对于非终结符A的短语;特别是,如果有A?β,则称β是句型αβδ相对于规则A→β的直接短语。一个句型的最左直接短语称为该句型的句柄。 定义在P44 语法树对应的短语,直接短语和句柄 由A?β可以看出,β是语法树生长过程中由A结点开始向下生长出来的全部树叶,缺少一片树叶都不满足A?β.也即,这些树叶由左至右排列可以向上归结到某个结点(比如说A),并且由该结点向下生长出来的全部树叶也恰好是刚归结的这些树叶,则这个树叶序列就是该结点的短语。 如果这种向上归结只需一层(即树叶与该结点为父子关系),则为直接短语。 句柄是语法树中最左那棵子树的树叶的自左至右排列,且这棵子树只有父子两代。 例: 设文法G 为: E→E+T|T T→T+P|P P→(E)|i 试用语法树法找出句型P+T+(E+i)的全部短语和直接短语,并找出句柄. 解: 设文法G 为: E→E+T|T T→T+P|P P→(E)|i 规范归约 规范归约是规范推导(最右推导)的逆过程,因此规范归约也称最左归约. 如果文法G是无二义性的,则规范推导的逆过程必定是规范归约. 我们用句柄来刻画移进-归约过程的可归约串。 移进归约分析器 分析器的四种动作 1) 移进:将下一输入符号移入栈 2) 归约:用产生式左侧的非终结符替换栈顶的句柄 3) 接受:分析成功 4) 出错:出错处理 各种自底向上分析方法的控制方法不同 例:i1*i2+i3 的分析 动作 栈 输入缓冲区 1) # i1*i2+i3 # 2) 移进 #i1 *i2+i3 # 3) 归约 F→i #F *i2+i3 # 4) 归约 T→F #T *i2+i3 # 5) 移进 #T* i2+i3 # 6) 移进 #T*i2 +i3# 7) 归约 F→i #T*F +i3 # 8) 归约 T→T*F #T +i3 # 9) 归约 E→T #E +i3 # 10) 移进 #E+ i3# 11) 移进 #E+i3 # 12) 归约 F→i #E+F # 13
文档评论(0)