编译原理教案- LR分析.ppt
《编译原理教案- LR分析.ppt》由会员分享,可在线阅读,更多相关《编译原理教案- LR分析.ppt(78页珍藏版)》请在三一办公上搜索。
1、LR分析,自下而上语法分析算法之,复习:移进-归约分析,文法GS:(1)S aAcBe(2)A b(3)A Ab(4)B d,a,b,b,c,d,e,步骤,符号栈,输入符号串,动作,1)#abbcde#移进,2)#a bbcde#移进,4)#aA bcde#移进,6)#aA cde#移进,7)#aAc de#移进,9)#aAcB e#移进,11)#S#接受,分析符号串abbcde是否GS的句子,对输入串abbcde#的移进-规约分析过程,在步骤3中,用Ab归约在步骤5中,用AAb归约问题:何时移进?何时归约?用哪个产生式归约?,3)#ab bcde#归约(Ab),5)#aAb cde#归约(A
2、Ab),4)#aA bcde#移进,6)#aA cde#移进,分析:已分析过的部分在栈中的前缀不同,而且移进和归约后栈中的状态会发生变化我们引入一个新的状态栈来表示符号栈中的符号目前状态用LR分析表来表示不同状态下对于各输入符号应采取的动作,步骤,符号栈,输入符号串,动作,1)#abbcde#移进 0 S2,2)#a bbcde#移进 02 S4,4)#aA bcde#移进 023 S6,6)#aA cde#移进 023 S5,7)#aAc de#移进 0235 S8,9)#aAcB e#移进 02357 S9,11)#S#接受 01 acc,对输入串abbcde#的LR分析过程,3)#ab
3、bcde#归约(Ab)024 r2 3,5)#aAb cde#归约(AAb)0236 r3 3,8)#aAcd e#归约(Bd)02358 r4 7,10)#aAcBe#归约(SaAcBe)023579 r1 1,状态栈,ACTION,GOTO,文法GS:(1)S aAcBe(2)A b(3)A Ab(4)B d,Si:移进,并将状态i进栈ri:用第i个产生式归约,同时状态栈与符号栈退出相应个符号,根据GOTO表将相应状态入栈,步骤,符号栈,输入符号串,动作,1)#abbcde#移进 0 S2,2)#a bbcde#移进 02 S4,4)#aA bcde#移进 023 S6,6)#aA cde
4、#移进 023 S5,7)#aAc de#移进 0235 S8,9)#aAcB e#移进 02357 S9,11)#S#接受 01 acc,对输入串abbcde#的LR分析过程,3)#ab bcde#归约(Ab)024 r2 3,5)#aAb cde#归约(AAb)0236 r3 3,8)#aAcd e#归约(Bd)02358 r4 7,10)#aAcBe#归约(SaAcBe)023579 r1 1,状态栈,ACTION,GOTO,文法GS:(1)S aAcBe(2)A b(3)A Ab(4)B d,Si:移进,并将状态i进栈ri:用第i个产生式归约,同时状态栈与符号栈退出相应个符号,根据GO
5、TO表将相应状态入栈,问题:对于一个文法,状态集是如何确定的?LR分析表是如何得到的?,可归前缀与活前缀,文法GS:(1)S aAcBe1(2)A b2(3)A Ab3(4)B d4,S aAcBe1 aAcd4e1 aAb3cd4e1 ab2b3cd4e1,每次归约句型的前部分依次为:ab2aAb3aAcd4aAcBe1,规范句型的这种前部分符号串称为可归前缀我们把形成可归前缀之前包括可归前缀在内的所有规范句型的前缀都称为活前缀,a,ab,a,aA,aAb,a,aA,aAc,aAcd,a,aA,aAc,aAcB,aAcBe,活前缀(Viable Prefixes),viable:adjcap
6、able of growing and developingcapable of being put into practice:workable定义:S A 是文法G中的一个规范推导,如果符号串是的前缀,则称是G的一个活前缀。,LR分析需要构造识别活前缀的有穷自动机我们可以文法的终结符和非终结符都看成有穷自动机的输入符号,每次把一个符号进栈看成已识别过了该符号,同时状态进行转换,当识别到可归前缀时,相当于在栈中形成句柄,认为达到了识别句柄的终态。,步骤,符号栈,输入符号串,动作,1)#abbcde#移进 0 S2,2)#a bbcde#移进 02 S4,4)#aA bcde#移进 023 S
7、6,6)#aA cde#移进 023 S5,7)#aAc de#移进 0235 S8,9)#aAcB e#移进 02357 S9,11)#S#接受 01 acc,对输入串abbcde#的LR分析过程,3)#ab bcde#归约(Ab)024 r2 3,5)#aAb cde#归约(AAb)0236 r3 3,8)#aAcd e#归约(Bd)02358 r4 7,10)#aAcBe#归约(SaAcBe)023579 r1 1,状态栈,ACTION,GOTO,0,1,4,2,3,5,7,6,9,S,a,b,A,b,c,B,e,d,8,*,步骤,符号栈,输入符号串,动作,1)#abbcde#移进 0
8、S2,对输入串abbcde#的LR分析过程,状态栈,ACTION,GOTO,0,1,4,2,3,5,7,6,9,S,a,b,A,b,c,B,e,d,8,*,步骤,符号栈,输入符号串,动作,1)#abbcde#移进 0 S2,2)#a bbcde#移进 02 S4,对输入串abbcde#的LR分析过程,状态栈,ACTION,GOTO,0,1,4,2,3,5,7,6,9,S,a,b,A,b,c,B,e,d,8,*,步骤,符号栈,输入符号串,动作,1)#abbcde#移进 0 S2,2)#a bbcde#移进 02 S4,对输入串abbcde#的LR分析过程,3)#ab bcde#归约(Ab)024
9、 r2 3,状态栈,ACTION,GOTO,0,1,4,2,3,5,7,6,9,S,a,b,A,b,c,B,e,d,8,*,步骤,符号栈,输入符号串,动作,1)#abbcde#移进 0 S2,2)#a bbcde#移进 02 S4,4)#aA bcde#移进 023 S6,对输入串abbcde#的LR分析过程,3)#ab bcde#归约(Ab)024 r2 3,状态栈,ACTION,GOTO,0,1,4,2,3,5,7,6,9,S,a,b,A,b,c,B,e,d,8,*,步骤,符号栈,输入符号串,动作,1)#abbcde#移进 0 S2,2)#a bbcde#移进 02 S4,4)#aA bc
10、de#移进 023 S6,对输入串abbcde#的LR分析过程,3)#ab bcde#归约(Ab)024 r2 3,5)#aAb cde#归约(AAb)0236 r3 3,状态栈,ACTION,GOTO,0,1,4,2,3,5,7,6,9,S,a,b,A,b,c,B,e,d,8,*,步骤,符号栈,输入符号串,动作,1)#abbcde#移进 0 S2,2)#a bbcde#移进 02 S4,4)#aA bcde#移进 023 S6,6)#aA cde#移进 023 S5,对输入串abbcde#的LR分析过程,3)#ab bcde#归约(Ab)024 r2 3,5)#aAb cde#归约(AAb)
11、0236 r3 3,状态栈,ACTION,GOTO,*,0,1,4,2,3,5,7,6,9,S,a,b,A,b,c,B,e,d,8,步骤,符号栈,输入符号串,动作,1)#abbcde#移进 0 S2,2)#a bbcde#移进 02 S4,4)#aA bcde#移进 023 S6,6)#aA cde#移进 023 S5,7)#aAc de#移进 0235 S8,对输入串abbcde#的LR分析过程,3)#ab bcde#归约(Ab)024 r2 3,5)#aAb cde#归约(AAb)0236 r3 3,状态栈,ACTION,GOTO,*,0,1,4,2,3,5,7,6,9,S,a,b,A,b
12、,c,B,e,d,8,步骤,符号栈,输入符号串,动作,1)#abbcde#移进 0 S2,2)#a bbcde#移进 02 S4,4)#aA bcde#移进 023 S6,6)#aA cde#移进 023 S5,7)#aAc de#移进 0235 S8,对输入串abbcde#的LR分析过程,3)#ab bcde#归约(Ab)024 r2 3,5)#aAb cde#归约(AAb)0236 r3 3,8)#aAcd e#归约(Bd)02358 r4 7,状态栈,ACTION,GOTO,0,1,4,2,3,5,7,6,9,S,a,b,A,b,c,B,e,d,8,*,步骤,符号栈,输入符号串,动作,1
13、)#abbcde#移进 0 S2,2)#a bbcde#移进 02 S4,4)#aA bcde#移进 023 S6,6)#aA cde#移进 023 S5,7)#aAc de#移进 0235 S8,9)#aAcB e#移进 02357 S9,对输入串abbcde#的LR分析过程,3)#ab bcde#归约(Ab)024 r2 3,5)#aAb cde#归约(AAb)0236 r3 3,8)#aAcd e#归约(Bd)02358 r4 7,状态栈,ACTION,GOTO,0,1,4,2,3,5,7,6,9,S,a,b,A,b,c,B,e,d,8,*,步骤,符号栈,输入符号串,动作,1)#abbc
14、de#移进 0 S2,2)#a bbcde#移进 02 S4,4)#aA bcde#移进 023 S6,6)#aA cde#移进 023 S5,7)#aAc de#移进 0235 S8,9)#aAcB e#移进 02357 S9,对输入串abbcde#的LR分析过程,3)#ab bcde#归约(Ab)024 r2 3,5)#aAb cde#归约(AAb)0236 r3 3,8)#aAcd e#归约(Bd)02358 r4 7,10)#aAcBe#归约(SaAcBe)023579 r1 1,状态栈,ACTION,GOTO,0,1,4,2,3,5,7,6,9,S,a,b,A,b,c,B,e,d,8
15、,*,步骤,符号栈,输入符号串,动作,1)#abbcde#移进 0 S2,2)#a bbcde#移进 02 S4,4)#aA bcde#移进 023 S6,6)#aA cde#移进 023 S5,7)#aAc de#移进 0235 S8,9)#aAcB e#移进 02357 S9,11)#S#接受 01 acc,对输入串abbcde#的LR分析过程,3)#ab bcde#归约(Ab)024 r2 3,5)#aAb cde#归约(AAb)0236 r3 3,8)#aAcd e#归约(Bd)02358 r4 7,10)#aAcBe#归约(SaAcBe)023579 r1 1,状态栈,ACTION,
16、GOTO,0,1,4,2,3,5,7,6,9,S,a,b,A,b,c,B,e,d,8,*,如何构造识别活前缀的有限自动机,已经有了活前缀如何构造有限自动机?活前缀及其可归前缀的一般计算方法,文法GS:S S0S aAcBe1A b2A Ab3B d4,句子abbcde的可归前缀如下:S0ab1aAb3aAcd4aAcBe1,构造识别其活前缀及可归前缀的有限自动机如下:,1,0,4,3,8,7,13,12,10,18,2,5,9,14,6,17,15,16,11,10,S,a,b,a,A,b,a,A,c,d,a,A,c,B,e,*,1,*,句子识别态,i,句柄识别态,1,0,4,3,8,7,13
17、,12,10,18,2,5,9,14,6,17,15,16,11,10,S,a,b,a,A,b,a,A,c,d,a,A,c,B,e,*,X,加上开始状态X,确定化,X,1,3,2,4,6,8,5,9,S,a,b,A,b,c,B,e,d,7,*,识别活前缀的确定的有限自动机,活前缀及其可归前缀的一般计算方法,定义:文法G,AVN,LC(A)=|S A,V*,VT*规范推导中在非终结符A左边所有可能出现的符号串的集合推论:若文法G中有产生式BA,则有LC(A)LC(B)*,文法GS:S S0S aAcBe1A b2A Ab3B d4,由前面的定义与推论我们知:LC(S)=LC(S)=LC(S)*L
18、C(A)=LC(S)*a LC(A)*LC(B)=LC(S)*aAc,化简为:S=S=SA=Sa+A B=SaAc,求解方程组可得:S=S=A=a+A B=aAc,A=a|A,A=a*=a,这样我们求出了每个非终结符在规范推导中用该非终结符的右部替换该非终结符之前,它的左部可能出现的所有前缀,也就是在规范归约过程中用句柄归约成该非终结符之前不包括句柄的活前缀。,不包括句柄的活前缀+句柄=?,可归前缀?,令 LR(0)C(A)=LC(A)*,文法G的可归前缀有:LR(0)C(S S)=S*S=S LR(0)C(S aAcBe)=S*aAcBe=aAcBe LR(0)C(A b)=A*b=ab L
19、R(0)C(A Ab)=A*Ab=aAb LR(0)C(B d)=B*d=aAcd,总结:如何构造识别文法活前缀的有限自动机?,1、根据文法算出其可归前缀2、根据可归前缀,构造识别文法活前缀的不确定有限自动机3、确定化,从而构造出识别文法活前缀的确定的有限自动机,参见课本P124的例子,LR分析器的构造,1、构造识别文法活前缀的确定有限自动机2、根据该自动机构造相应的分析表(ACTION表、GOTO表),总控程序,Action/Goto表,输入符号串,输出,状态与符号栈,这种方法构造识别可归前缀的有限自动机从理论的角度讲是比较严格的,但实现起来却很复杂是否存在一种比较实用的方法?,由文法的产生
20、式直接构造识别活前缀和可归前缀的有限自动机项目(item):在每个产生式的右部适当位置添加一个圆点构成项目例如:产生式S aAcBe对应有6个项目 0 S aAcBe 1 S a AcBe 2 S aA cBe 3 S aAc Be 4 S aAcB e 5 S aAcBe 有限自动机的每一个状态由一个项目构成,项目圆点的左部表示分析过程的某个时刻用该产生式归约时句柄已识别的部分,圆点右部表示待识别的部分。构造识别活前缀的NFA:1、把文法的所有产生式的项目都引出,每个项目都为NFA的一个状态2、确定初态、句柄识别态、句子识别态3、确定状态之间的转换关系*若项目i为 X X1X2.Xi-1 X
21、i.Xn项目j为 X X1X2.Xi-1 Xi Xi+1.Xn则从状态i到状态j连一条标记为Xi的箭弧*若i为X A,k为A,则从状态i画标记为 的箭弧到状态k,文法G:S EE T+E E TT int*T T int T(E),文法的项目有:1、S E2、S E 3、E T+E4、E T+E5、E T+E6、E T+E 7、E T8、E T 9、T int*T10、T int*T11、T int*T12、T int*T,13、T int 14、T int 15、T(E)16、T(E)17、T(E)18、T(E),NFA for Viable Prefixes of the Example,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理教案- LR分析 编译 原理 教案 LR 分析
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-2312413.html