【教学课件】第6章自底向上优先分析法.ppt

上传人:wuy****n92 文档编号:69866926 上传时间:2023-01-10 格式:PPT 页数:27 大小:463.97KB
返回 下载 相关 举报
【教学课件】第6章自底向上优先分析法.ppt_第1页
第1页 / 共27页
【教学课件】第6章自底向上优先分析法.ppt_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《【教学课件】第6章自底向上优先分析法.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第6章自底向上优先分析法.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、编译原理编译原理第第6 6章章 自底向上优先分析法自底向上优先分析法 自底向上优先分析概述 简单优先分析 算符优先分析返回目录编译原理编译原理自底向上分析方法自底向上分析方法自底向上分析方法,也称移进移进-归约归约分析法。实现思想:对输入符号串自左向右进行扫描,并将输入将输入符逐个移入一个后进先出栈中符逐个移入一个后进先出栈中,边移入边分析,一旦栈顶符号串形成某个句型的句柄时,一旦栈顶符号串形成某个句型的句柄时,(该句型对应某产生式的右部),就用就用该产生式的左部左部非终结符代替代替相应右部的文法符号串,这称为归约归约。重复这一过程直到归约到栈中只剩文法的开重复这一过程直到归约到栈中只剩文法的

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)#aAcd e#归约归约(Bd)9)#aAcB e#移进移进11)#S#接受接受分析符号串分析符号

3、串abbcdeabbcde是否为是否为GSGS的句子的句子?对输入串abbcde#的移进-规约分析过程SaAcBe aAcde aAbcde abbcde编译原理编译原理算法应考虑的问题算法应考虑的问题 算法是否能够终止?算法是否能够终止?算法是否快速?算法是否快速?算法是否能够处理所有的情况?算法是否能够处理所有的情况?在每一步中如何选择子串进行归约?在每一步中如何选择子串进行归约?编译原理编译原理自下而上语法分析的策略:移进自下而上语法分析的策略:移进-规约分析。规约分析。移进移进就是将一个终结符推进栈。就是将一个终结符推进栈。归约归约就是将就是将0 0个或多个符号从栈中弹出,根个或多个符

4、号从栈中弹出,根据产生式将一个非终结符压入栈。据产生式将一个非终结符压入栈。移进移进-归约过程是自顶向下最右推导的逆过归约过程是自顶向下最右推导的逆过程(规范归约)。程(规范归约)。编译原理编译原理 简单优先分析法 对一个文法按一定原则求出该文法所有符号(终结符和非终结符)之间的优先关系,按照这种关系确定归约过程中的句柄,它的归约实际上是一种规范归约。算符优先分析法 只规定算符(终结符)之间的优先关系。找到句柄就归约,不是规范归约。优先分析法优先分析法编译原理编译原理简单优先分析法简单优先分析法按照文法符号(包括终结符和非终结符)的优先关系确定句柄。编译原理编译原理文法文法GSGS:(1)S

5、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#接受接受对输入串b(aa)#的简单优先分析过程简单优先关系矩阵编译原理编译原理优先关系优先关系优先关系优

6、先关系1)X=Y 文法文法G中存在产生式中存在产生式A.XY.2)XY 文法文法G中存在产生式中存在产生式A.BD.,且且B .X,D Y.如何确定两个文法符号之间的优先关系?如何确定两个文法符号之间的优先关系?返回调用编译原理编译原理简单优先文法的定义简单优先文法的定义 满足以下条件的文法是简单优先文法(1)在文法符号集V中,任意两个符号之间最多只有一种优先关系成立。(2)在文法中任意两个产生式没有相同的右部。(3)不含空产生式。编译原理编译原理简单优先分析法简单优先分析法根据已知优先文法构造相应优先关系矩阵,并将文法的产生式保存,设置符号栈S,算法步骤如下:1.将输入符号串a1a2a3.a

7、n#依次逐个存入符号栈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.求求=关系:关系:由由(1):b=A A=b由由(2):(=B由由(3):A=a a=)2.求

8、求关系:关系:由由(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)#i +i*i#+,规约规约 3)#E +i*i#+,移进移进 4)#E+i*i#+i,移进

9、移进 5)#E+i *i#+*,规约规约 6)#E+E *i#+*,移进移进 7)#E+E*i#*i,移进移进 8)#E+E*i#*#,规约规约 9)#E+E*E#+#,规约规约10)#E+E#,规约规约11)#E#接受接受对输入串对输入串i+i*ii+i*i的算符优先分析过程的算符优先分析过程算符优先关系表编译原理编译原理如何确定算符优先关系?如何确定算符优先关系?1)i的优先级最高2)优先级次于i,右结合3)*和/优先级次之,左结合4)+和-优先级最低,左结合5)括号(,)的优先级大于括号外的运算符,小于括号内的运算符,内括号的优先性大于外括号6)#的优先性低于与其相邻的算符文法文法GE:

10、EE+E|E-E|E*E|E/E|E E|(E)|i算符优先关系表算符优先关系表编译原理编译原理算符文法的定义算符文法的定义定义定义 如果不含空产生式的上下文无关文法如果不含空产生式的上下文无关文法 G G 中没有形如中没有形如 U UVWVW的产生式,其中的产生式,其中V,WVV,WVN N则称则称G G 为算符文法(为算符文法(OGOG)。)。性质性质1 1:在算符文法中任何句型都不包含两个在算符文法中任何句型都不包含两个相邻的非终结符相邻的非终结符.(.(数学归纳法数学归纳法)性质性质2 2:如如 VxVx 或或 xVxV 出现在算符文法的句型出现在算符文法的句型 中,其中中,其中VVV

11、VN N,xV,xVT T,则则 中任何含中任何含 x x 的短语必含有的短语必含有V.V.(反证法)反证法)编译原理编译原理算符优先关系的定义算符优先关系的定义在在OGOG中中 定义定义 (算符优先关系)(算符优先关系)1)1)x x=y G y G中有形如中有形如.U Uxyxy或或U U xVyxVy.的产的产生式。生式。2)2)x x y Gy G中有形如中有形如.U U WyWy的产生式的产生式,而而 W xW x或或W W xVxV规定规定 若若 S xS x或或S S VxVx 则则#x#编译原理编译原理算符优先文法的定义算符优先文法的定义在 OG文法 G 中,若任意两个终结符间

12、至多有一种算符优先关系存在,则称G 为算符优先文法(OPG)。注意注意:允许bc,cb;不允许bc,bc,b=c 结论:算符优先文法是无二义的。编译原理编译原理算符优先关系表的构造算符优先关系表的构造由定义直接构造由定义直接构造由关系图法构造算符优先关系表由关系图法构造算符优先关系表编译原理编译原理首先引入两个概念首先引入两个概念FIRSTVT(B)=b|B bFIRSTVT(B)=b|B b或或B B CbCb.对于非终结符对于非终结符B B,其往下推导所可能出现的其往下推导所可能出现的首个算符。首个算符。LASTVT(B)=a|B aLASTVT(B)=a|B a或或B .B .aCaC

13、对于非终结符对于非终结符B B,其往下推导所可能出现的其往下推导所可能出现的最后一个算符。最后一个算符。编译原理编译原理如何计算算符优先关系如何计算算符优先关系1)=关系关系直接看产生式的右部,若出现了直接看产生式的右部,若出现了A ab或或A aBb,则则a=b。2)关系关系求出每个非终结符求出每个非终结符B的的FIRSTVT(B),若若AaB,则则 bFIRSTVT(B),则则a关系关系求出每个非终结符求出每个非终结符B的的LASTVT(B),若若ABb,则则 aLASTVT(B),则则ab。编译原理编译原理文法文法GE:(0)E#E#(1)EE+T(2)ET(3)TT*F(4)TF(5)

14、FP F|P(6)P(E)(7)PiFIRSTVT(E)=#FIRSTVT(E)=+,*,(,iFIRSTVT(T)=*,(,iFIRSTVT(F)=,(,iFIRSTVT(P)=(,iLASTVT(E)=#LASTVT(E)=+,*,),iLASTVT(T)=*,),iLASTVT(F)=,),iLASTVT(P)=),i1)=关系关系由产生式由产生式(0)和和(6),得得#=#,(,(=)2)关系关系找形如:找形如:AaB的产生式的产生式#E:则则#FIRSTVT(E)+T:则则+FIRSTVT(T)*F:则则*FIRSTVT(F)F:则则 FIRSTVT(F)(E:则则(关系关系找形如:

15、找形如:ABb的产生式的产生式E#,则则 LASTVT(E)#E+,则则 LASTVT(E)+T*,则则 LASTVT(T)*P ,则则 LASTVT(P)E),则则 LASTVT(E)编译原理编译原理算符优先分析算法算符优先分析算法归约过程中,只考虑终结符之间的优先关系来确定句柄,而与非终结符无关。这样去掉了单非终结符的归约,所以用算符优先分析法的规约过程与规范归约是不同的,P110.为解决在算符优先分析过程中如何寻找句柄,引进最左素短语最左素短语的概念。编译原理编译原理最左素短语最左素短语算符文法的任一句型有如下形式:#N1a1N2a2.NnanNn+1#,若Niai.NjajNj+1为句

16、柄,则有 ai-1 ai+1对于算符优先文法,如果aNb(或ab)出现在句型r中若ab,则在r中必含有a而不含b的短语存在。若a=b,则在r中含有a的短语必含有b,反之亦然。定义 cfg G 的句型的素短语是一个短语,它至少包含一个终结符,且除自身外不再包含其他素短语。处于句型最左边的素短语为最左素短语。编译原理编译原理文法文法GEGE:(1)EE+T(1)EE+T(2)ET(2)ET(3)TT*F(3)TT*F(4)TF(4)TF(5)FP(5)FP F|PF|P(6)P(6)P(E)(E)(7)Pi(7)Pi句型句型#T+T*F+i#其短语有:其短语有:T+T*F+iT+T*FTT*FiEET+ETF*FTTi最左素短语为:最左素短语为:T*F句型#N+N*N+i#的归约过程NN+NNi*NNN编译原理编译原理优先函数优先函数优先函数比优先矩阵节省空间当发生错误时不能准确指出出错位置如:i+ii*i#,两个相邻i不存在优先关系,但优先函数存在,会归约成N+NN.而发现错误。优先函数的构造由定义直接构造用关系图构造优先函数编译原理编译原理算符优先分析法的局限性算符优先分析法的局限性一般语言的方法很难满足算符优先文法的条件。很难避免把错误的句子得到正确的归约。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁