第6章自底向上优先分析法.ppt
《第6章自底向上优先分析法.ppt》由会员分享,可在线阅读,更多相关《第6章自底向上优先分析法.ppt(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编译原理编译原理第6章自底向上优先分析法 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望编译原理编译原理自底向上分析方法自底向上分析方法自底向上分析方法,也称移进移进-归约归约分析法。实现思想:对输入符号串自左向右进行扫描,并将输入将输入符逐个移入一个后进先出栈中符逐个移入一个后进先出栈中,边移入边分析,一旦栈顶符号串形成某个句型的句柄时,一旦栈顶符号串形成某个句型的句柄时,(该句型对应某产生式的右部),就用就用该产生式的左部左部非终结符代替代替相应右部的文法符号
2、串,这称为归约归约。重复这一过程直到归约到栈中只剩文法的开重复这一过程直到归约到栈中只剩文法的开始符号时则为分析成功始符号时则为分析成功,也就确认输入串是文法的句子。S10)#aAcBe#归约归约(SaAcBe)文法文法GS:(1)S aAcBe(2)A b(3)A Ab(4)B da b b c de步骤步骤符号栈符号栈输入符号串输入符号串动作动作 1)#abbcde#移进移进 2)#a bbcde#移进移进A 3)#ab bcde#归约归约(Ab)4)#aA bcde#移进移进A 5)#aAb cde#归约归约(AAb)6)#aA cde#移进移进 7)#aAc de#移进移进B 8)#a
3、Acd e#归约归约(Bd)9)#aAcB e#移进移进11)#S#接受接受分析符号串分析符号串abbcdeabbcde是否为是否为GSGS的句子的句子?对输入串abbcde#的移进-规约分析过程SaAcBe aAcde aAbcde abbcde编译原理编译原理算法应考虑的问题算法应考虑的问题 算法是否能够终止?算法是否能够终止?算法是否快速?算法是否快速?算法是否能够处理所有的情况?算法是否能够处理所有的情况?在每一步中如何选择子串进行归约?在每一步中如何选择子串进行归约?编译原理编译原理自下而上语法分析的策略:移进自下而上语法分析的策略:移进-规约分析。规约分析。移进移进就是将一个终结符
4、推进栈。就是将一个终结符推进栈。归约归约就是将就是将0 0个或多个符号从栈中弹出,根个或多个符号从栈中弹出,根据产生式将一个非终结符压入栈。据产生式将一个非终结符压入栈。移进移进-归约过程是自顶向下最右推导的逆过归约过程是自顶向下最右推导的逆过程(规范归约)。程(规范归约)。编译原理编译原理 简单优先分析法 对一个文法按一定原则求出该文法所有符号(终结符和非终结符)之间的优先关系,按照这种关系确定归约过程中的句柄,它的归约实际上是一种规范归约。算符优先分析法 只规定算符(终结符)之间的优先关系。找到句柄就归约,不是规范归约。优先分析法优先分析法编译原理编译原理简单优先分析法简单优先分析法按照文
5、法符号(包括终结符和非终结符)的优先关系确定句柄。编译原理编译原理文法文法GSGS:(1)S bAb(1)S bAb(2)A (B|a(2)A (B|a(3)B Aa)(3)B Aa)步骤步骤符号栈符号栈输入符号串输入符号串动作动作 1)#b(aa)b#b,移进移进 2)#b (aa)b#b(,移进移进 3)#b(aa)b#(a,归约归约Aa 5)#b(A a)b#A=a,移进移进 6)#b(Aa )b#a=),移进移进 7)#b(Aa)b#)b,归约归约BAa)8)#b(B b#Bb,归约归约A(B 9)#bA b#A=b,移进移进10)#bAb#b#,归约归约SbAb11)#S#接受接受对
6、输入串b(aa)#的简单优先分析过程简单优先关系矩阵编译原理编译原理优先关系优先关系优先关系优先关系1)X=Y 文法文法G中存在产生式中存在产生式A.XY.2)XY 文法文法G中存在产生式中存在产生式A.BD.,且且B .X,D Y.如何确定两个文法符号之间的优先关系?如何确定两个文法符号之间的优先关系?返回调用编译原理编译原理简单优先文法的定义简单优先文法的定义 满足以下条件的文法是简单优先文法(1)在文法符号集V中,任意两个符号之间最多只有一种优先关系成立。(2)在文法中任意两个产生式没有相同的右部。(3)不含空产生式。编译原理编译原理简单优先分析法简单优先分析法根据已知优先文法构造相应优
7、先关系矩阵,并将文法的产生式保存,设置符号栈S,算法步骤如下:1.将输入符号串a1a2a3.an#依次逐个存入符号栈S中,直到遇到栈顶符号ai的优先性下一个待输入符号aj时为止。2.栈顶当前符号ai为句柄尾,由此向左在栈中找句柄的头符号ak,即找到ak-1ak为止。3.由句柄ak.ai在文法的产生式中查找右部为ak.ai的产生式,若找到则用相应左部代替句柄,若找不到则为出错,这时可断定输入串不是该文法的句子。4.重复上述三步,直到归约完输入符号串,栈中只剩文法的开始符号为止。编译原理编译原理如何确定优先关系?如何确定优先关系?文法文法GS:(1)S bAb(2)A (B|a(3)B Aa)1.
8、求求=关系:关系:由由(1):b=A A=b由由(2):(=B由由(3):A=a a=)2.求求关系:关系:由由(1)(2):b(ba由由(2)(3):(A (关系:关系:由由(1):Bb ab)b由由(3):Ba aa)a4.#查看关系定义编译原理编译原理算符优先分析法算符优先分析法某些文法具有“算符”特性表达式运算符(优先级、结合性)人为地规定其算符的优先顺序,即给出优先级别和同一级别的结合性只考虑算符之间的优先关系来确定句柄编译原理编译原理文法文法GE:EE+E|E-E|E*E|E/E|E E|(E)|i步骤步骤符号栈符号栈输入符号串输入符号串动作动作 1)#i+i*i#i,移进移进 2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 向上 优先 分析
限制150内