编译原理第七章ppt课件.ppt
《编译原理第七章ppt课件.ppt》由会员分享,可在线阅读,更多相关《编译原理第七章ppt课件.ppt(82页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用第七章第七章 LRLR分析法分析法经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用第七章第七章LR分析法分析法7.1 LR分析概述7.2 LR(0)分析7.3 SLR(1)分析7.4 LR(1)分析7.5 LALR(1)分析7.6 二义性文法在LR分析中的应用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费
2、用复习:复习:自底向上分析自底向上分析n思想思想n从输入串出发,反复利用产生式进行归约,如从输入串出发,反复利用产生式进行归约,如果最后能得到文法的开始符号,则输入串是句子,果最后能得到文法的开始符号,则输入串是句子,否则输入串有语法错误否则输入串有语法错误n核心核心n寻找句型中的当前归约对象寻找句型中的当前归约对象“句柄句柄”进行进行归约归约,用不同的方法寻找句柄,就可获得不同的用不同的方法寻找句柄,就可获得不同的分析方法分析方法3经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用1.优先法优先法-ch6算符优先
3、分析算符优先分析根据归约的先后次序为句型中根据归约的先后次序为句型中相邻相邻的文法符的文法符号规定优先关系号规定优先关系句柄内相邻符号同时归约,是同优先级的句柄内相邻符号同时归约,是同优先级的句柄两个端点符号的优先级要高于句柄外与之句柄两个端点符号的优先级要高于句柄外与之相邻的符号的优先级,句柄内相邻符号具有相相邻的符号的优先级,句柄内相邻符号具有相同的优先级同的优先级a1ai-1aj+1an4经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用2.状态法状态法-ch7 LR分析法分析法根据句柄的形成过程建立状态根据
4、句柄的形成过程建立状态用状态来描述不同时刻句柄是否形成用状态来描述不同时刻句柄是否形成因为句柄是产生式的右部,可用产生式来表示因为句柄是产生式的右部,可用产生式来表示句柄的不同识别状态句柄的不同识别状态例如:例如:SbBB可分解为如下识别状态可分解为如下识别状态S.bBB 移进移进b bSb.BB 等待归约出等待归约出B BSbB.B 等待归约出等待归约出B BSbBB.归约归约5经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用LR分析法是分析法是1965年由年由Knuth提出的一种提出的一种自自底向上底向上分析
5、方法,它的适用范围很广,很受分析方法,它的适用范围很广,很受计算机理论界的重视。计算机理论界的重视。自底向上分析法的关键问题是在分析过程自底向上分析法的关键问题是在分析过程中中如何确定句柄如何确定句柄。LR分析法能根据当前分析栈分析法能根据当前分析栈中的符号串(通常以状态表示)和向右顺序查中的符号串(通常以状态表示)和向右顺序查看输入串的看输入串的k个(个(k0)符号可唯一确定分析器)符号可唯一确定分析器的动作是移进还是归约和用哪个产生式归约,的动作是移进还是归约和用哪个产生式归约,能唯一地确定句柄。能唯一地确定句柄。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失
6、,增加赔偿的金额为消费者购买商品的价款或接受服务的费用LR(K)表示)表示“从左至右,每步向前从左至右,每步向前(右)查看(右)查看K个输入符号个输入符号”。K=0表示表示不需要向右查看输入符号不需要向右查看输入符号LR分析法严格执行最左归约,分析法严格执行最左归约,是一是一种规范归约种规范归约,这一点与算符优先分析法,这一点与算符优先分析法不同。不同。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用LR分析法的分析法的优点优点:对文法限制少,适用范围广。对文法限制少,适用范围广。分析速度快分析速度快能准确及时地
7、报错能准确及时地报错缺点缺点:构造分析器的工作量较大构造分析器的工作量较大K值愈大,实现愈困难值愈大,实现愈困难经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用本章主要介绍本章主要介绍LR分析的基本思想,及分析的基本思想,及当当K1时,时,LR分析器的基本构造原理和分析器的基本构造原理和方法。着重介绍方法。着重介绍LR(0)、)、SLR(1)、)、LALR(1)、LR(1)四种分析器的构造)四种分析器的构造方法。方法。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消
8、费者购买商品的价款或接受服务的费用7.1LR分析概述分析概述一一LR分析器的组成分析器的组成一个一个LRLR分析器由分析器由3 3个部分组成:个部分组成:(1)总控程序总控程序:也称驱动程序,所有:也称驱动程序,所有LR分析器的总分析器的总控程序都是相同的。控程序都是相同的。(2)分析表或分析函数分析表或分析函数:不同的文法分析表不同;同一不同的文法分析表不同;同一个文法采用的个文法采用的LR分析器不同时,分析表也不同。分析器不同时,分析表也不同。分析表可分为分析表可分为动作表(动作表(ACTION)和和状态转换状态转换表表(GOTO)两部分,它们都可用二维数组表示。两部分,它们都可用二维数组
9、表示。(3)分析栈分析栈:包括文法符号栈和状态栈:包括文法符号栈和状态栈经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用二 LR分析器工作过程分析器工作过程LR分析器的动作由栈顶状态和当前输入分析器的动作由栈顶状态和当前输入符号决定。符号决定。SP输出输出输入串输入串#总控程序总控程序ACTION表表GOTO表表SnXn S1X1S0X0经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 SP:栈指针:栈指针Si:状态栈:状态栈Xi:
10、文法符号栈:文法符号栈ACTION表和表和GOTO表分别为动作表和状态转换表。表分别为动作表和状态转换表。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用GOTOSi,X=Sj表示栈顶状态为表示栈顶状态为Si遇到当遇到当前前文法符号为文法符号为X时应转向状态时应转向状态Sj。ACTIONSi,a规定了栈顶状态为规定了栈顶状态为Si时遇时遇到到输入符号输入符号a应执行的动作。动作有应执行的动作。动作有4种种:(1)移进移进:把:把a移入文法符号栈,把移入文法符号栈,把Sj=GOTOSi,a移入到状态栈。其移入到状态
11、栈。其中中i,j表示状态号。表示状态号。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用(2)归约归约:当栈顶形成句柄为:当栈顶形成句柄为时,把时,把归约为归约为相应的非终结符相应的非终结符A(A为文法中的为文法中的产生式)。设产生式)。设的长度为的长度为r(即(即|=r),则从状态栈和文法符号栈中自),则从状态栈和文法符号栈中自顶向下顶向下去掉去掉r个符号(即栈指针个符号(即栈指针SP-r),把),把A移入文法符号栈,移入文法符号栈,Sj=GOTOSi,A移进状态栈,移进状态栈,Si为为修改指针后的栈顶状态。修
12、改指针后的栈顶状态。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用(3)接受接受acc:文法符号栈中只有开始符:文法符号栈中只有开始符S,输,输入串只入串只有有#,则为分析成功。,则为分析成功。(4)报错报错:当遇到状态栈顶为某一状态下出:当遇到状态栈顶为某一状态下出现不该遇到的文法符号时,则报错,现不该遇到的文法符号时,则报错,说明输入串不是该文法能接受的句说明输入串不是该文法能接受的句子。子。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或
13、接受服务的费用LR分析器的分析器的关键部分是分析表的构造关键部分是分析表的构造,下面,下面将针对每种不同的将针对每种不同的LR分析器详细介绍其构造分析器详细介绍其构造思想及方法。思想及方法。7.2LR(0)分析)分析LR(0)分析表构造的思想和方法是构造)分析表构造的思想和方法是构造其它其它LR分析表的基础。分析表的基础。先引进一些概念和术语:先引进一些概念和术语:经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用拓广文法拓广文法:对原文法:对原文法GS增加一产生式增加一产生式SS,S只在左部出现。只在左部出现。对
14、文法进行拓广的目的:为了对某些右对文法进行拓广的目的:为了对某些右部含有开始符的文法,在归约过程中能分清部含有开始符的文法,在归约过程中能分清是否已归约到文法的最初开始符,还是在文是否已归约到文法的最初开始符,还是在文法右部出现的开始符。拓广文法的开始符法右部出现的开始符。拓广文法的开始符S只在左部出现,这样确保不会混淆。只在左部出现,这样确保不会混淆。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 可归前缀可归前缀:如果有:如果有S=,为终结符串为终结符串(或空),(或空),含有句柄,且句柄在含有句柄,且句柄
15、在 的后端,称的后端,称 为可归前缀。为可归前缀。*R活前缀活前缀:把形成可归前缀之前包括可归前缀:把形成可归前缀之前包括可归前缀在内的所有规范句型的前缀都称为活前缀。在内的所有规范句型的前缀都称为活前缀。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用定义定义7.1若若S=A =是文法是文法G中的一个规范推导(中的一个规范推导(为句柄),如果符为句柄),如果符号串号串是是的前缀,则称的前缀,则称是是G G的一个的一个活活前缀前缀,的右端不超过句柄的末端。的右端不超过句柄的末端。*RR经营者提供商品或者服务有欺诈
16、行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用例如:例如:GS:(:(1)SaAcBe(2)Ab(3)AAb(4)BdaAbcde是规范句型。是规范句型。因为因为:S=aAcBe=aAcde=aAbcde 从左至右,从左至右,规范句型规范句型aAbcde的活前缀有的活前缀有、a、aA、aAb,而,而aAbc不是活前缀,因为它不是活前缀,因为它包含句柄后面的符号包含句柄后面的符号c。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用由以上分析我们很容易理解,在由
17、以上分析我们很容易理解,在LR分析过分析过程中,实际上是把程中,实际上是把的前缀列出放在符号的前缀列出放在符号栈中,一旦在栈中出现栈中,一旦在栈中出现(可归前缀),(可归前缀),即句柄已经形成,则用产生式即句柄已经形成,则用产生式A进行归进行归约。(约。(参考参考P125-表表7.2)经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用7.2.2 7.2.2 识别活前缀的有限自动机识别活前缀的有限自动机(略)(略)7.2.3 7.2.3 活前缀及其可归前缀的一般计算方法活前缀及其可归前缀的一般计算方法(略)(略)7.
18、2.4 LR7.2.4 LR(0 0)项目集规范族的构造)项目集规范族的构造 (1)LR(0)项目)项目 在文法在文法G中每个产生式的右部适当位置添中每个产生式的右部适当位置添加一个圆点加一个圆点 构成项目。构成项目。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用例如:例如:SaAc对应有对应有4个项目个项目:(右部长度(右部长度3加加1)0S aAc1Sa Ac2SaA c3SaAc 一个产生式可对应的项目数为它的右部符一个产生式可对应的项目数为它的右部符号串长度加号串长度加1 注意:注意:A仅有项目仅有项目
19、A 经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用每个项目的含义与圆点的位置有关,概括每个项目的含义与圆点的位置有关,概括地说地说,圆点的左部圆点的左部表示分析过程的某时刻表示分析过程的某时刻用该产生式归约时句柄已识别的部分,用该产生式归约时句柄已识别的部分,圆圆点的右部点的右部表示待识别部分。表示待识别部分。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用项目项目S aAc:希望用希望用S的右部归约,当前输入串中符号应为的右部归
20、约,当前输入串中符号应为a项目项目Sa Ac:已与第一个符号已与第一个符号a匹配,需分析匹配,需分析A的右部的右部项目项目SaA c:A的右部已分析完归约成的右部已分析完归约成A,希望输入串中符号为,希望输入串中符号为c项目项目SaAc:S的右部分析完毕,句柄已形成,可以进行归约的右部分析完毕,句柄已形成,可以进行归约。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用根据圆点所在位置和圆点后是终结符还是非根据圆点所在位置和圆点后是终结符还是非终结符,把项目分为以下几种:终结符,把项目分为以下几种:1.移移进进项项
21、目目:圆圆点点后后为为终终结结符符的的项项目目,对对应应状状态为移进状态。态为移进状态。形如形如A a,aVT 2.2.待约项目待约项目:圆点后为非终结符的项目,如圆点后为非终结符的项目,如A B,BVN。表示所对应的状态等待表示所对应的状态等待着分析完非终结符着分析完非终结符B所能推出的串归约成所能推出的串归约成B,才能继续分析,才能继续分析A的右部。的右部。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用3.3.归约项目归约项目:圆点在最右部的项目,如:圆点在最右部的项目,如A,表明一个产生式的右部已分析完,
22、句柄已,表明一个产生式的右部已分析完,句柄已形成,可以归约。形成,可以归约。4.4.接受项目接受项目:形如:形如S,S为拓广文法,为拓广文法,S为左部的产生式只有一个,它是特殊的归为左部的产生式只有一个,它是特殊的归约项目,对应状态为接受状态。约项目,对应状态为接受状态。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用(3)LR(0)项目集规范族的构造)项目集规范族的构造 n对于构成识别一个文法活前缀的对于构成识别一个文法活前缀的DFA项目集的项目集的全体称为这个文法的全体称为这个文法的LR(0)项目集规范族项目
23、集规范族。n按(按(2)中方法,列出拓广文法的所有项目,)中方法,列出拓广文法的所有项目,构造构造NFA再确定化,这样做确定化的工作量较再确定化,这样做确定化的工作量较大,可以大,可以用闭包函数求用闭包函数求DFA项目集项目集。(2 2)构造识别活前缀的构造识别活前缀的NFA(了解了解)经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 定义和构造项目集定义和构造项目集 I的闭包函数的闭包函数 CLOSURE(I)a)I的项目均在的项目均在CLOSURE(I)中)中b)若若A B属属于于CLOSURE(I),则则每
24、每一一形如形如B 的项目也属于的项目也属于CLOSURE(I)c)重复重复b)直到)直到CLOSURE(I)不再扩大为止)不再扩大为止经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 定义转换函数定义转换函数GO(I,X)如下)如下:GO(I,X)=CLOSURE(J)其中:其中:I为包含某一项目的状态,为包含某一项目的状态,XVN VTJ=任何形如任何形如AX 的项目的项目|A X属于属于I经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服
25、务的费用圆圆点点不不在在产产生生式式右右部部最最左左边边的的项项目目称称为为核核(拓广文法(拓广文法S S除外)除外)GO(I,X)转换函数得到的)转换函数得到的J为转向后状态为转向后状态所含项目集的核。所含项目集的核。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用使用使用CLOSURE和和GO(I,X)构造文法)构造文法G的的LR(0)项目集规范族)项目集规范族:a)置置项项目目S S为为初初态态集集的的核核,求求CLOSURE(S S)得到初态的项目集)得到初态的项目集b)对初态集或其它的项目集应用转换函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 第七 ppt 课件
限制150内