编译原理教案-LR分析.pptx





《编译原理教案-LR分析.pptx》由会员分享,可在线阅读,更多相关《编译原理教案-LR分析.pptx(78页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、LR分析自下而上语法分析算法之 复习:移进-归约分析文法文法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 # 接受接受S10) #aAcBe
2、# 归约归约(SaAcBe)分析符号串abbcde是否GS的句子对输入串abbcde#的移进-规约分析过程SaAcBe aAcde aAbcde abbcde 在步骤在步骤3中,用中,用Ab归约归约 在步骤在步骤5中,用中,用AAb归约归约 问题:何时移进?何时归约?用哪个产问题:何时移进?何时归约?用哪个产生式归约?生式归约? 3) #ab bcde# 归约归约(Ab) 5) #aAb cde# 归约归约(AAb) 4) #aA bcde# 移进移进 6) #aA cde# 移进移进分析:已分析过的部分在栈中的分析:已分析过的部分在栈中的前缀前缀不同,而且移进和归不同,而且移进和归约后栈中的
3、状态会发生变化约后栈中的状态会发生变化我们引入一个新的我们引入一个新的状态栈状态栈来表示符号栈中的符号目前状态来表示符号栈中的符号目前状态用用LRLR分析表分析表来表示不同状态下对于各输入符号应采取的动来表示不同状态下对于各输入符号应采取的动作作步骤步骤 符号栈符号栈 输入符号串输入符号串动作动作 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 S911)
4、#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 710) #aAcBe # 归约归约(SaAcBe) 023579 r1 1ACTIO NGO TOacebd#SAB0S211acc2S433S5S64r2r2r2r2r2r2576r3r3r3r3r3r378r4r4r4r4r4r49r1r1r1r1r1r1状态栈状态栈ACTIONGOTO文法文法GS:(1) S aAcBe(2) A
5、 b(3) A Ab(4) B dSi:移进,并将状态移进,并将状态i进栈进栈ri:用第用第i个产生式归约,同时状个产生式归约,同时状态栈与符号栈退出相应个符号,态栈与符号栈退出相应个符号,根据根据GOTO表将相应状态入栈表将相应状态入栈步骤步骤 符号栈符号栈 输入符号串输入符号串动作动作 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 S911) #S #
6、 接受接受 01 acc对输入串abbcde#的LR分析过程 3) #ab bcde# 归约归约(Ab) 024 r2 3 5) #aAb cde# 归约归约(AAb) 0236 r3 3 8) # aAcd e# 归约归约(Bd) 02358 r4 710) #aAcBe # 归约归约(SaAcBe) 023579 r1 1ACTIO NGO TOacebd#SAB0S211acc2S433S5S64r2r2r2r2r2r2576r3r3r3r3r3r378r4r4r4r4r4r49r1r1r1r1r1r1状态栈状态栈ACTIONGOTO文法文法GS:(1) S aAcBe(2) A b(3
7、) A Ab(4) B dSi:移进,并将状态移进,并将状态i进栈进栈ri:用第用第i个产生式归约,同时状个产生式归约,同时状态栈与符号栈退出相应个符号,态栈与符号栈退出相应个符号,根据根据GOTO表将相应状态入栈表将相应状态入栈问题: 对于一个文法,状态集是如何确定的? LR分析表是如何得到的?可归前缀与活前缀文法文法GS:(1) S aAcBe1(2) A b2(3) A Ab3(4) B d4S aAcBe1 aAcd4e1 aAb3cd4e1 ab2b3cd4e1每次归约句型的每次归约句型的前部分前部分依次为:依次为:ab2aAb3aAcd4aAcBe1规范句型的这种前部分符号串称为规
8、范句型的这种前部分符号串称为可归前缀可归前缀我们把形成可归前缀之前包括可归前缀在内我们把形成可归前缀之前包括可归前缀在内的所有规范句型的前缀都称为的所有规范句型的前缀都称为活前缀活前缀 ,a,ab ,a,aA,aAb ,a,aA,aAc,aAcd ,a,aA,aAc,aAcB,aAcBe活前缀(Viable Prefixes) viable:adj capable of growing and developing capable of being put into practice : workable 定义: S A 是文法G中的一个规范推导,如果符号串是的前缀,则称是G的一个活前缀。R*
9、R 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 S911) #S # 接受接受
10、 01 acc对输入串abbcde#的LR分析过程 3) #ab bcde# 归约归约(Ab) 024 r2 3 5) #aAb cde# 归约归约(AAb) 0236 r3 3 8) # aAcd e# 归约归约(Bd) 02358 r4 710) #aAcBe # 归约归约(SaAcBe) 023579 r1 1状态栈状态栈ACTIONGOTO014235769SabAbcBed8*步骤步骤 符号栈符号栈 输入符号串输入符号串动作动作 1) # abbcde# 移进移进 0 S2对输入串abbcde#的LR分析过程状态栈状态栈ACTIONGOTO014235769SabAbcBed8*步骤
11、步骤 符号栈符号栈 输入符号串输入符号串动作动作 1) # abbcde# 移进移进 0 S2 2) #a bbcde# 移进移进 02 S4 对输入串abbcde#的LR分析过程状态栈状态栈ACTIONGOTO014235769SabAbcBed8*步骤步骤 符号栈符号栈 输入符号串输入符号串动作动作 1) # abbcde# 移进移进 0 S2 2) #a bbcde# 移进移进 02 S4 对输入串abbcde#的LR分析过程 3) #ab bcde# 归约归约(Ab) 024 r2 3状态栈状态栈ACTIONGOTO014235769SabAbcBed8*步骤步骤 符号栈符号栈 输入符
12、号串输入符号串动作动作 1) # abbcde# 移进移进 0 S2 2) #a bbcde# 移进移进 02 S4 4) #aA bcde# 移进移进 023 S6对输入串abbcde#的LR分析过程 3) #ab bcde# 归约归约(Ab) 024 r2 3状态栈状态栈ACTIONGOTO014235769SabAbcBed8*步骤步骤 符号栈符号栈 输入符号串输入符号串动作动作 1) # abbcde# 移进移进 0 S2 2) #a bbcde# 移进移进 02 S4 4) #aA bcde# 移进移进 023 S6对输入串abbcde#的LR分析过程 3) #ab bcde# 归约
13、归约(Ab) 024 r2 3 5) #aAb cde# 归约归约(AAb) 0236 r3 3状态栈状态栈ACTIONGOTO014235769SabAbcBed8*步骤步骤 符号栈符号栈 输入符号串输入符号串动作动作 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) 0236 r3 3状态栈状态栈ACTION
14、GOTO*014235769SabAbcBed8步骤步骤 符号栈符号栈 输入符号串输入符号串动作动作 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状态栈状态栈ACTIONGOTO*014235769SabAbcBed8步骤步骤 符号栈符号栈
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对输入串abbcde#的LR分析过程 3) #ab bcde# 归约归约(Ab) 024 r2 3 5) #aAb cde# 归约归约(AAb) 0236 r3 3 8) # aAcd e# 归约归约(Bd) 02358 r4 7状态栈状态栈ACTIONGOTO014235769SabAbcBed8*步骤步骤 符号栈符号栈 输
16、入符号串输入符号串动作动作 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对输入串abbcde#的LR分析过程 3) #ab bcde# 归约归约(Ab) 024 r2 3 5) #aAb cde# 归约归约(AAb) 0236 r3 3 8) # aAcd e# 归约归约(Bd) 02358 r4 7状态栈状态栈ACTIONGOTO014235769
17、SabAbcBed8*步骤步骤 符号栈符号栈 输入符号串输入符号串动作动作 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对输入串abbcde#的LR分析过程 3) #ab bcde# 归约归约(Ab) 024 r2 3 5) #aAb cde# 归约归约(AAb) 0236 r3 3 8) # aAcd e# 归约归约(Bd) 02358 r4 71
18、0) #aAcBe # 归约归约(SaAcBe) 023579 r1 1状态栈状态栈ACTIONGOTO014235769SabAbcBed8*步骤步骤 符号栈符号栈 输入符号串输入符号串动作动作 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 S911) #S # 接受接受 01 acc对输入串abbcde#的LR分析过程 3) #ab bcde# 归约归
19、约(Ab) 024 r2 3 5) #aAb cde# 归约归约(AAb) 0236 r3 3 8) # aAcd e# 归约归约(Bd) 02358 r4 710) #aAcBe # 归约归约(SaAcBe) 023579 r1 1状态栈状态栈ACTIONGOTO014235769SabAbcBed8*如何构造识别活前缀的有限自动机 已经有了活前缀如何构造有限自动机? 活前缀及其可归前缀的一般计算方法文法文法GS:S S0S aAcBe1A b2A Ab3B d4句子句子abbcdeabbcde的可归前缀如下:的可归前缀如下:S0S0ab1ab1aAb3aAb3aAcd4aAcd4aAcBe
20、1aAcBe1构造识别其活前缀及可归前缀的有限自动机如下:构造识别其活前缀及可归前缀的有限自动机如下:104387131210182591461715161110SabaAbaAcdaAcBe*1*句子识别态i句柄识别态104387131210182591461715161110SabaAbaAcdaAcBe*X加上开始状态X确定化 X13246859SabAbcBed7*识别活前缀的确定的有限自动机识别活前缀的确定的有限自动机活前缀及其可归前缀的一般计算方法定义:文法G,AVN,LC(A)= | S A, V*, VT *规范推导中在非终结符A左边所有可能出现的符号串的集合推论:若文法G中有
21、产生式B A,则有LC(A) LC(B)* R*文法文法GS:S S0S aAcBe1A b2A Ab3B d4由前面的定义与推论我们知:LC(S) = LC(S) = LC(S) * LC(A) = LC(S) *a LC(A) * LC(B) = LC(S) *aAc化简为:S = S = SA = Sa+A B = SaAc求解方程组可得:S = S = A = a+A B = aAcA = a|AA = a *=a这样我们求出了每个这样我们求出了每个非终结符非终结符在规范推导中用该非终结符在规范推导中用该非终结符的右部替换该非终结符之前,它的左部可能出现的的右部替换该非终结符之前,它的
22、左部可能出现的所有前所有前缀缀,也就是在规范归约过程中用句柄归约成该非终结符之,也就是在规范归约过程中用句柄归约成该非终结符之前前不包括句柄的活前缀不包括句柄的活前缀。不包括句柄的活前缀不包括句柄的活前缀 + 句柄句柄 = ? 可归前缀?可归前缀? 令令 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 LR(0)C(A Ab) = A*Ab = aAb LR(0)C(B d) = B*d = aAcd总结:
23、如何构造识别文法活前缀的有限自动机?总结:如何构造识别文法活前缀的有限自动机? 1、根据文法算出其可归前缀、根据文法算出其可归前缀2、根据可归前缀,构造识别文法活前缀的不确定有限自动机、根据可归前缀,构造识别文法活前缀的不确定有限自动机3、确定化,从而构造出识别文法活前缀的确定的有限自动机、确定化,从而构造出识别文法活前缀的确定的有限自动机参见课本参见课本P124的例子的例子LR分析器的构造分析器的构造 1、构造识别文法活前缀的确定有限自动机、构造识别文法活前缀的确定有限自动机2、根据该自动机构造相应的分析表、根据该自动机构造相应的分析表(ACTION表、表、GOTO表表)总控程序总控程序Ac
24、tion/Goto表表输入符号串输入符号串输出输出状态与符号栈状态与符号栈这种方法构造识别可归前缀的有限自动机从理论的角度讲是比较严格的,但实现起来却很复杂是否存在一种比较实用的方法?由文法的产生式直接构造识别活前缀和可归前缀的有限自动机项目(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 有限自动机的每一个状态由一个项目构成项目圆点的左部表示分析过程的某个时刻用该产生式归约时句柄已识别的部分,圆点右部表示待识别的部
25、分。构造识别活前缀的NFA:1、把文法的所有产生式的项目都引出,每个项目都为NFA的一个状态2、确定初态、句柄识别态、句子识别态3、确定状态之间的转换关系*若项目i为 X X1X2.Xi-1 Xi.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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 教案 LR 分析

限制150内