语法分析自下而上分析.ppt
《语法分析自下而上分析.ppt》由会员分享,可在线阅读,更多相关《语法分析自下而上分析.ppt(108页珍藏版)》请在三一办公上搜索。
1、国防科技大学计算机系602教研室,第五章 语法分析自下而上分析,自上而下分析法(Top-down)自下而上分析法(Bottom-up),国防科技大学计算机系602教研室,语法分析的方法:自下而上分析法(Bottom-up)基本思想:从输入串开始,逐步进行“归约”,直到文法的开始符号。即从树末端开始,构造语法树。所谓归约,是指根据文法的产生式规则,把产生式的右部替换成左部符号。算符优先分析法:按照算符的优先关系和结合性质进行语法分析。适合分析表达式。LR分析法:规范归约,国防科技大学计算机系602教研室,5.1.1 归约,采用“移进归约”思想进行自下而上分析。基本思想:用一个寄存符号的先进后出栈
2、,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。,国防科技大学计算机系602教研室,国防科技大学计算机系602教研室,b,d,b,a,c,e,分析树和语法树不一定一致。自下而上分析过程:边输入单词符号,边归约。核心问题:识别可归约串,国防科技大学计算机系602教研室,5.1.2 规范归约,定义:令G是一个文法,S是文法的开始符号,假定是文法G的一个句型,如果有 且,则称是句型相对于非终结符A的短语。特别是,如果有A,则称是句型相对于规则A 的直接短语。一个句型的最左直接短语称为该句型的句柄。,国防科技大学计算机系602教研
3、室,在一个句型对应的语法树中,以某非终结符为根的两代以上的子树的所有末端结点从左到右排列就是相对于该非终结符的一个短语,如果子树只有两代,则该短语就是直接短语。,国防科技大学计算机系602教研室,定义:假定是文法G的一个句子,我们称序列 n,n-1,0 是的一个规范归约,如果此序列满足:1 n=2 0为文法的开始符号,即0=S 3 对任何i,0 i n,i-1是从i经把句柄替换成为相应产生式左部符号而得到的。,国防科技大学计算机系602教研室,把上例倒过来写,则得到:S aAcBe aAcde aAbcde abbcde 显然这是一个最右推导。规范归约是关于是一个最右推导的逆过程最左归约 规范
4、推导由规范推导推出的句型称为规范句型。,国防科技大学计算机系602教研室,5.2 算符优先分析,四则运算的优先规则:先乘除后加减,同级从左到右考虑二义文法文法G(E):G(E):E i|E+E|E-E|E*E|E/E|(E)它的句子有几种不同的规范规约。归约即计算表达式的值。归约顺序不同,则计算的顺序也不同,结果也不一样。如果规定算符的优先次序,并按这种规定进行归约,则归约过程是唯一的。,国防科技大学计算机系602教研室,起决定作用的是相邻的两个算符之间的优先关系。所谓算符优先分析法就是定义算符之间的某种优先关系,借助于这种关系寻找“可归约串”和进行归约。,国防科技大学计算机系602教研室,首
5、先必须定义任何两个可能相继出现的终结符a与b的优先关系 三种关系a b a的优先级低于ba b a的优先级等于ba b a的优先级高于b注意:与数学上的=不同,a b并不意味着b a,国防科技大学计算机系602教研室,5.2.1 算符优先文法及优先表构造,一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结符,即不含如下形式的产生式右部:QR 则我们称该文法为算符文法。约定:a、b代表任意终结符;P、Q、R代表任意非终结符;代表由终结符和非终结符组成的任意序列,包括空字。,国防科技大学计算机系602教研室,假定G是一个不含-产生式的算符文法。对于任何一对终结符a、b,我们说:1.a
6、b当且仅当文法G中含有形如Pab或PaQb的产生式;,如果一个算符文法G中的任何终结符对(a,b)至多只满足下述三关系之一:ab,ab,ab 则称G是一个算符优先文法。,2.ab当且仅当G中含有形如PaR的产生式,而R b或R Qb;,3.ab 当且仅当G中含有形如PRb的产生式,而 R a或R aQ。,国防科技大学计算机系602教研室,优先关系表,国防科技大学计算机系602教研室,从算符优先文法G构造优先关系表的算法。通过检查G的每个产生式的每个候选式,可找出所有满足ab的终结符对。确定满足关系和的所有终结符对:首先需要对G的每个非终结符P构造两个集合FIRSTVT(P)和LASTVT(P)
7、:,国防科技大学计算机系602教研室,有了这两个集合之后,就可以通过检查每个产生式的候选式确定满足关系和的所有终结符对。假定有个产生式的一个候选形为aP 那么,对任何bFIRSTVT(P),有 ab。假定有个产生式的一个候选形为Pb 那么,对任何aLASTVT(P),有 ab。,国防科技大学计算机系602教研室,首先讨论构造集合FIRSTVT(P)的算法。按其定义,可用下面两条规则来构造集合FIRSTVT(P):1.若有产生式Pa或PQa,则aFIRSTVT(P);2.若aFIRSTVT(Q),且有产生式PQ,则aFIRSTVT(P)。,国防科技大学计算机系602教研室,数据结构:布尔数组FP
8、,a,使得FP,a为真的条件是,当且仅当aFIRSTVT(P)。开始时,按上述的规则(1)对每个数组元素FP,a赋初值。栈STACK,把所有初值为真的数组元素FP,a的符号对(P,a)全都放在STACK之中。,国防科技大学计算机系602教研室,运算:如果栈STACK不空,就将顶项逐出,记此项为(Q,a)。对于每个形如PQ 的产生式,若FP,a为假,则变其值为真且将(P,a)推进STACK栈。上述过程必须一直重复,直至栈STACK拆空为止。,国防科技大学计算机系602教研室,如果把这个算法稍为形式化一点,我们可得如下所示的一个程序(包括一个过程和主程序):PROCEDURE INSERT(P,a
9、);IF NOT FP,a THENBEGIN FP,a:=TRUE;把(P,a)下推进STACK栈 END;,国防科技大学计算机系602教研室,主程序:BEGIN FOR 每个非终结符P和终结符a DO FP,a:=FALSE;FOR 每个形如Pa或PQa的产生式 DO INSERT(P,a);WHILE STACK 非空 DOBEGIN 把STACK的顶项,记为(Q,a),上托出去;FOR 每条形如PQ的产生式 DOINSERT(P,a);END OF WHILE;END,国防科技大学计算机系602教研室,这个算法的工作结果得到一个二维数组F,从它可得任何非终结符P的FIRSTVT。FIR
10、STVT(P)a|FP,a=TRUE同理,可构造计算LASTVT的算法。使用每个非终结符P的FIRSTVT(P)和LASTVT(P),就能够构造文法G的优先表。构造优先表的算法是:,国防科技大学计算机系602教研室,FOR 每条产生式PX1X2Xn DO FOR i:=1 TO n-1 DOBEGIN IF Xi和Xi+1均为终结符 THEN 置XiXi+1 IF in-2且Xi和Xi+2都为终结符 但Xi+1为非终结符 THEN 置XiXi+2;IF Xi为终结符而Xi+1为非终结符 THENFOR FIRSTVT(Xi+1)中的每个a DO 置 Xia;IF Xi为非终结符而Xi+1为终结
11、符 THEN FOR LASTVT(Xi)中的每个a DO 置 aXi+1 END,国防科技大学计算机系602教研室,例:考虑下面的文法G(E):(1)EE+T|T(2)TT*F|F(3)FP F|P(4)P(E)|i1.计算文法G的FIRSTVT和LASTVT;2.构造优先关系表;3.G是算符优先文法吗?,国防科技大学计算机系602教研室,国防科技大学计算机系602教研室,结论:G是算符优先文法,G的算符优先关系表,国防科技大学计算机系602教研室,5.2.2 算符优先分析算法,可归约串,句型,短语,直接短语,句柄,规范归约。一个文法G的句型的素短语是指这样一个短语,它至少含有一个终结符,并
12、且,除它自身之外不再含任何更小的素短语。最左素短语是指处于句型最左边的那个素短语。,国防科技大学计算机系602教研室,考虑下面的文法G(E):(1)EE+T|T(2)TT*F|F(3)FP F|P(4)P(E)|i,句型:T+F*P+i,短语:T+F*P+i,T,F,P,F*P,i,T+F*P直接短语:T,F,P,i句柄:T素短语:F*P,i最左素短语:F*P,国防科技大学计算机系602教研室,算符优先文法句型(括在两个之间)的一般形式写成:#N1a1N2a2NnanNn+1#其中,每个ai都是终结符,Ni是可有可无的非终结符。定理:一个算符优先文法G的任何句型的最左素短语是满足如下条件的最左
13、子串 NjajNiaiNi+1,aj-1aj aj aj+1,ai-1ai aiai+1,国防科技大学计算机系602教研室,算符优先分析算法使用一个符号栈S,用它寄存终结符和非终结符,k代表符号栈S的使用深度。1 k:=1;Sk:=#;2 REPEAT3 把下一个输入符号读进a中;4 IF SkVT THEN j:=k ELSE j:=k-1;5 WHILE Sja DO6 BEGIN7 REPEAT8 Q:=Sj;9 IF Sj-1VT THEN j:=j-1 ELSE j:=j-210 UNTIL SjQ;,国防科技大学计算机系602教研室,11把Sj+1Sk归约为某个N;12k:=j+1
14、;13Sk:=N14END OF WHILE;15IF Sja OR Sja THEN16 BEGIN k:=k+1;Sk:=a END17ELSE ERROR/*调用出错诊察程序*/18 UNTIL a=#,国防科技大学计算机系602教研室,在算法的工作过程中,若出现j减1后的值小于等于0时,则意味着输入串有错。在正确的情况下,算法工作完毕时,符号栈S应呈现:#N#。算法的第11行中的N是指那样一个产生式的左部符号,此产生式的右部和Sj+1Sk 构成如下一一对应关系:自左至右,终结符对终结符,非终结符对非终结符,而且对应的终结符相同。由于非终结符对归约没有影响,因此,非终结符根本可以不进符号
15、栈S。,国防科技大学计算机系602教研室,算符优先分析一般并不等价于规范归约。,国防科技大学计算机系602教研室,算符优先分析法特点:优点:简单,快速缺点:可能错误接受非法句子,能力有限.算符优先分析法是一种广为应用、行之有效的方法。用于分析各类表达式ALGOL 60,国防科技大学计算机系602教研室,5.2.3 优先函数,把每个终结符与两个自然数f()与g()相对应,使得若1 2,则f(1)g(2)f称为入栈优先函数,g称为比较优先函数。优点:便于比较,节省空间;缺点:原来不存在优先关系的两个终结符,由于自然数相对应,变成可以比较的。要进行一些特殊的判断。,国防科技大学计算机系602教研室,
16、文法G(E)(1)EE+T|T(2)TT*F|F(3)FP F|P(4)P(E)|i的优先函数如下表,国防科技大学计算机系602教研室,有许多优先关系表不存在优先函数,如:,不存在对应的优先函数f和g 假定存在f和g,则有 f(a)=g(a),f(a)g(b),f(b)=g(a),f(b)=g(b)导致如下矛盾:f(a)g(b)=f(b)=g(a)=f(a)如果优先函数存在,则不唯一(无穷多),国防科技大学计算机系602教研室,如果优先函数存在,则可以通过以下三个步骤从优先表构造优先函数:1 对于每个终结符a,令其对应两个符号fa和ga,画一以所有符号和为结点的方向图。如果ab,则从fa画一条
17、弧至gb,如果ab,则画一条弧从gb至fa。2 对每个结点都赋予一个数,此数等于从该结点出发所能到达的结点(包括出发点自身)。赋给fa的数作为f(a),赋给ga的数作为g(a)。3 检查所构造出来的函数f和g是否与原来的关系矛盾。若没有矛盾,则f和g就是要求的优先函数,若有矛盾,则不存在优先函数。,国防科技大学计算机系602教研室,现在必须证明:若ab,则f(a)g(b);若ab,则f(a)g(b)。第一个关系可从函数的构造直接获得。因为,若ab,则既有从fa到gb的弧,又有从gb到fa的弧。所以,fa和gb所能到达的结是全同的。至于ab和ab的情形,只须证明其一。,国防科技大学计算机系602
18、教研室,如果ab,则有从fa到gb的弧。也就是,gb能到达的任何结fa也能到达。因此,f(a)g(b)。我们所需证明的是,在这种情况下,f(a)g(b)不应成立。我们将指出,如果f(a)g(b),则根本不存在优先函数。假若f(a)g(b),那么必有如下的回路:,国防科技大学计算机系602教研室,因此有ab,a1b,a1b1,ambm,abm对任何优先函数f和g来说,必定有f(a)g(b)f(a1)g(b1)f(am)g(bm)f(a)从而导致f(a)f(a),产生矛盾。因此,不存在优先函数f和g。,国防科技大学计算机系602教研室,例:取前面文法G(E)(1)EE+T|T(2)TT*F|F(3
19、)FP F|P(4)P(E)|i的终结符+,*,i,国防科技大学计算机系602教研室,国防科技大学计算机系602教研室,5.3 LR分析法,LR分析法:1965年 由Knuth提出,分析表产生器,产生分析表,LR分析器工作,国防科技大学计算机系602教研室,主要介绍,1.总控程序(LR分析器)的处理思想2.LR分析表的构造方法及原理,国防科技大学计算机系602教研室,5.3.1 LR分析器,规范归约的关键问题是寻找句柄.“历史”:已移入符号栈的内容“展望”:根据产生式推测未来可能遇到的输入符号“现实”:当前的输入符号,国防科技大学计算机系602教研室,LR分析方法:把历史及展望综合抽象成状态;
20、由栈顶的状态和现行的输入符号唯一确定每一步工作,LR分析程 序,国防科技大学计算机系602教研室,LR分析器的核心是一张分析表:ACTIONs,a:当状态s面临输入符号a时,应采取什么动作.GOTOs,X:状态s面对文法符号X时,下一状态是什么,国防科技大学计算机系602教研室,每一项ACTIONs,a所规定的四种动作:1.移进 把(s,a)的下一状态s和输入符号a推进栈,下一输入符号变成现行输入符号.2.归约 指用某产生式A进行归约.假若的长度为r,归约动作是,去除栈顶r个项,使状态sm-r变成栈顶状态,然后把(sm-r,A)的下一状态s=GOTOsm-r,A和文法符号A推进栈.3.接受 宣
21、布分析成功,停止分析器工作.4.报错,国防科技大学计算机系602教研室,分析开始时:状态 已归约串 输入串(s0,#,a1a2 an#)以后每步的结果可以表示为:(s0 s1 sm,#X1 Xm,aiai+1 an#),国防科技大学计算机系602教研室,(s0 s1 sm,#X1 Xm,aiai+1 an#)分析器根据ACTION(sm,ai)确定下一步动作1.若ACTION(sm,ai)为移进,且s,则三元式格局变为:(s0 s1 sms,#X1 Xm ai,ai+1 an#)2.若ACTION(sm,ai)为按A归约,三元式变为:(s0 s1 sm-rs,#X1 Xm-rA,aiai+1
22、an#)此处,s=GOTO(sm-r,A),r为的长度,=Xm-r+1 Xm3.若ACTION(sm,ai)为接受,则三元式不再变化,变化过程终止,宣布分析成功.4.若ACTION(sm,ai)为报错,则三元式变化过程终止,报告错误.,国防科技大学计算机系602教研室,LR分析器示例:,文法G(E):(1)EET(2)ET(3)TT*F(4)TF(5)F(E)(6)Fi,国防科技大学计算机系602教研室,其LR分析表为:,国防科技大学计算机系602教研室,假定输入串为i*i+i,LR分析器的工作过程:步骤状态符号输入串(1)0#i*i+i#(2)05#i*i+i#(3)03#F*i+i#(4)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语法分析 自下而上 分析

链接地址:https://www.31ppt.com/p-5841050.html