欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载
     

    第四部分语法分析自上而下分析.ppt

    • 资源ID:5147380       资源大小:624.02KB        全文页数:88页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第四部分语法分析自上而下分析.ppt

    国防科技大学计算机系602教研室,第四章 语法分析自上而下分析,本章主要介绍语法分析的处理要进行语法分析,必须对语言的语法结构进行描述。采用正规式和有限自动机可以描述和识别语言的单词符号;用上下文无关文法来描述语法规则。,国防科技大学计算机系602教研室,上下文无关文法的定义:一个上下文无关文法G是一个四元式 G=(VT,VN,S,P),其中VT:终结符集合(非空)VN:非终结符集合(非空),且VT VN=S:文法的开始符号,SVNP:产生式集合(有限),每个产生式形式为P,PVN,(VT VN)*开始符S至少必须在某个产生式的左部出现一次。,国防科技大学计算机系602教研室,例,定义只含+,*的算术表达式的文法 G=,其中,P由下列产生式组成:E iE E+EE E*EE(E),国防科技大学计算机系602教研室,定义:称A直接推出,即A 仅当A 是一个产生式,且,(VT VN)*。如果1 2 n,则我们称这个序列是从1到n的一个推导。若存在一个从1到n的推导,则称1可以推导出n。例:对文法(1)E(E)(E+E)(i+E)(i+i),国防科技大学计算机系602教研室,通常,用 表示:从1出发,经过一步或若干步,可以推出n。,用 表示:从1出发,经过0步或若干步,可以推出n。,所以:即 或,定义:假定G是一个文法,S 是它的开始符号。如果,则称是一个句型。仅含终结符号的句型是一个句子。文法G所产生的句子的全体是一个语言,将它记为 L(G)。,国防科技大学计算机系602教研室,4.1 语法分析器的功能,语法分析的任务是分析一个文法的句子结构。语法分析器的功能:按照文法的产生式(语言的语法规则),识别输入符号串是否为一个句子(合式程序)。,国防科技大学计算机系602教研室,.,国防科技大学计算机系602教研室,语法分析的方法:自下而上分析法(Bottom-up)基本思想:从输入串开始,逐步进行“归约”,直到文法的开始符号。即从树末端开始,构造语法树。所谓归约,是指根据文法的产生式规则,把产生式的右部替换成左部符号。算符优先分析法:按照算符的优先关系和结合性质进行语法分析。适合分析表达式。,国防科技大学计算机系602教研室,G(E):E i|E+E|E-E|E*E|E/E|(E)i*i+i E*i+i E*E+i E+i E+E E,i,+,*,i,i,国防科技大学计算机系602教研室,自上而下分析法(Top-down)基本思想:它从文法的开始符号出发,反复使用各种产生式,寻找匹配的推导。递归下降分析法:对每一语法变量(非终结符)构造一个相应的子程序,每个子程序识别一定的语法单位,通过子程序间的信息反馈和联合作用实现对输入串的识别。预测分析程序优点:直观、简单和宜于手工实现。,国防科技大学计算机系602教研室,4.2 自上而下分析面临的问题,自上而下就是从文法的开始符号出发,向下推导,推出句子。带“回溯”的不带回溯的递归子程序(递归下降)分析方法。自上而下分析的主旨:对任何输入串,试图用一切可能的办法,从文法开始符号(根结点)出发,自上而下地为输入串建立一棵语法树。或者说,为输入串寻找一个最左推导。,国防科技大学计算机系602教研室,例3.4.1 假定有文法G(S):(1)SxAy(2)A*|*分析输入串x*y(记为)。,国防科技大学计算机系602教研室,当某个非终结符有多个产生式候选时,可能带来如下问题:1.分析过程中,当一个非终结符用某一个候选匹配成功时,这种匹配可能是暂时的。出错时,不得不“回溯”。2.文法左递归问题。一个文法是含有左递归的,如果存在非终结符P,含有左递归的文法将使自上而下的分析陷入无限循环。,国防科技大学计算机系602教研室,4.3 LL(1)分析法,构造不带回溯的自上而下分析算法要消除文法的左递归性克服回溯,国防科技大学计算机系602教研室,4.3.1 左递归的消除,直接消除见诸于产生式中的左递归:假定关于非终结符P的规则为PP|其中不以P开头。我们可以把P的规则等价地改写为如下的非直接左递归形式:PPPP|,国防科技大学计算机系602教研室,一般而言,假定P关于的全部产生式是PP1|P2|Pm|1|2|n其中,每个都不等于,每个都不以P开头 那么,消除P的直接左递归性就是把这些规则改写成:P1P|2P|nPP1P|2P|mP|,国防科技大学计算机系602教研室,例 文法G(E):EET|TTT*F|FF(E)|i经消去直接左递归后变成:ETE E+TE|TFT T*FT|F(E)|i,(4.2),国防科技大学计算机系602教研室,例如文法G(S):SQc|cQRb|bRSa|a(4.3)虽没有直接左递归,但S、Q、R都是左递归的SQcRbcSabc,一个文法消除左递归的条件:不含以为右部的产生式不含回路。,国防科技大学计算机系602教研室,消除左递归的算法:1.把文法G的所有非终结符按任一种顺序排列成P1,P2,Pn;按此顺序执行;2.FOR i:=1 TO n DO BEGIN FOR j:=1 TO i-1 DO 把形如PiPj的规则改写成 Pi1|2|k;(其中Pj1|2|k是关于Pj的所有规则)消除关于Pi规则的直接左递归性 END3.化简由2所得的文法。去除那些从开始符号出发永远无法到达的非终结符的产生规则。,国防科技大学计算机系602教研室,例 考虑文法G(S)SQc|cQRb|bRSa|a令它的非终结符的排序为R、Q、S。对于R,不存在直接左递归。把R代入到Q的有关候选后,把Q的规则变为 QSab|ab|b,国防科技大学计算机系602教研室,现在的Q不含直接左递归,把它代入到S的有关候选后,S变成SSabc|abc|bc|c消除S的直接左递归后:SabcS|bcS|cSSabcS|QSab|ab|bRSa|a关于Q和R的规则已是多余的,化简为:SabcS|bcS|cSSabcS|(4.4),国防科技大学计算机系602教研室,注意,由于对非终结符排序的不同,最后所得的文法在形式上可能不一样。但不难证明,它们都是等价的。例如,若对文法(4.3)的非终结符排序选为S、Q、R,那么,最后所得的无左递归文法是:SQc|cQRb|bRbcaR|caR|a R(4.5)R bca R|文法(4.4)和(4.5)的等价性是显然的。,国防科技大学计算机系602教研室,4.3.2 消除回溯、提左因子,为了消除回溯就必须保证:对文法的任何非终结符,当要它去匹配输入串时,能够根据它所面临的输入符号准确地指派它的一个候选去执行任务,并且此候选的工作结果应是确信无疑的。A 1|2|n,国防科技大学计算机系602教研室,令G是一个不含左递归的文法,对G的所有非终结符的每个候选定义它的终结首符集FIRST()为:,特别是,若,则规定FIRST()。,如果非终结符A的所有候选首符集两两不相交,即A的任何两个不同候选 i和 jFIRST(i)FIRST(j)当要求A匹配输入串时,A就能根据它所面临的第一个输入符号a,准确地指派某一个候选前去执行任务。这个候选就是那个终结首符集含a的。,国防科技大学计算机系602教研室,提取公共左因子:假定关于A的规则是 A 1|2|n|1|2|m(其中,每个 不以开头)那么,可以把这些规则改写成AA|1|2|mA 1|2|n经过反复提取左因子,就能够把每个非终结符(包括新引进者)的所有候选首符集变成为两两不相交。,国防科技大学计算机系602教研室,假定S是文法G的开始符号,对于G的任何非终结符A,我们定义,特别是,若,则规定 FOLLOW(A),4.3.3 LL(1)分析条件,国防科技大学计算机系602教研室,i+i,IP,E,国防科技大学计算机系602教研室,i+i,IP,E,T,E,国防科技大学计算机系602教研室,i+i,IP,E,T,E,F,T,国防科技大学计算机系602教研室,i+i,IP,E,T,E,F,T,i,国防科技大学计算机系602教研室,i+i,IP,E,T,E,F,T,i,国防科技大学计算机系602教研室,i+i,IP,E,T,E,F,T,i,国防科技大学计算机系602教研室,i+i,IP,E,T,E,F,T,i,+,T,E,国防科技大学计算机系602教研室,i+i,IP,E,T,E,F,T,i,+,T,E,国防科技大学计算机系602教研室,i+i,IP,E,T,E,F,T,i,+,T,E,F,T,国防科技大学计算机系602教研室,i+i,IP,E,T,E,F,T,i,+,T,E,F,T,i,国防科技大学计算机系602教研室,i+i,IP,E,T,E,F,T,i,+,T,E,F,T,i,国防科技大学计算机系602教研室,i+i,IP,E,T,E,F,T,i,+,T,E,F,T,i,国防科技大学计算机系602教研室,i+i,IP,E,T,E,F,T,i,+,T,E,F,T,i,国防科技大学计算机系602教研室,构造不带回溯的自上而下分析的文法条件1.文法不含左递归,2.对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交。即,若A 1|2|n 则 FIRST(i)FIRST(j)(ij)3.对文法中的每个非终结符A,若它存在某个候选首符集包含,则FIRST(i)FOLLOW(A)=i=1,2,.,n如果一个文法G满足以上条件,则称该文法G为LL(1)文法。,国防科技大学计算机系602教研室,对于一个满足上述条件的文法,可以对其输入串进行有效的无回溯的自上而下分析。假设要用非终结符A进行匹配,面临的输入符号为a,A的所有产生式为A 1|2|n1.若aFIRST(i),则指派 i执行匹配任务;2.若a不属于任何一个候选首符集,则:(1)若属于某个FIRST(i)且 aFOLLOW(A),则让A与自动匹配。(2)否则,a的出现是一种语法错误。,国防科技大学计算机系602教研室,构造FIRST(),国防科技大学计算机系602教研室,对每一文法符号XVTVN构造FIRST(X)连续使用下面的规则,直至每个集合FIRST不再增大为止:1.若XVT,则FIRST(X)X。2.若XVN,且有产生式Xa,则把a加入到FIRST(X)中;若X也是一条产生式,则把也加到FIRST(X)中。,国防科技大学计算机系602教研室,3.若XY是一个产生式且YVN,则把FIRST(Y)中的所有非-元素都加到FIRST(X)中;若XY1Y2Yk是一个产生式,Y1,Yi-1都是非终结符,而且,对于任何j,1ji-1,FIRST(Yj)都含有(即Y1Yi-1),则把FIRST(Yi)中的所有非-元素都加到FIRST(X)中;特别是,若所有的FIRST(Yj)均含有,j1,2,k,则把加到FIRST(X)中。,国防科技大学计算机系602教研室,对文法G的任何符号串=X1X2Xn构造集合FIRST()。1.置FIRST()FIRST(X1);2.若对任何1ji-1,FIRST(Xj),则把FIRST(Xi)加至FIRST()中;特别是,若所有的FIRST(Xj)均含有,1jn,则把也加至FIRST()中。显然,若则FIRST()。,国防科技大学计算机系602教研室,构造FOLLOW(A),国防科技大学计算机系602教研室,对于文法G的每个非终结符A构造FOLLOW(A)的办法是,连续使用下面的规则,直至每个FOLLOW不再增大为止:1.对于文法的开始符号S,置于FOLLOW(S)中;2.若AB是一个产生式,则把FIRST()加至FOLLOW(B)中;,3.若AB是一个产生式,或AB是一个产生式而(即FIRST(),则把FOLLOW(A)加至FOLLOW(B)中。,国防科技大学计算机系602教研室,例4.6 对于文法G(E)ETEE+TE|TFT T*FT|F(E)|i构造每个非终结符的FIRST和FOLLOW集合:,FIRST(E)=(,iFIRST(E)=+,FIRST(T)=(,iFIRST(T)=*,FIRST(F)=(,i,FOLLOW(E)=),#FOLLOW(E)=),#FOLLOW(T)=+,),#FOLLOW(T)=+,),#FOLLOW(F)=*,+,),#,国防科技大学计算机系602教研室,4.4 递归下降分析程序构造,构造不带回溯的自上而下分析程序要消除文法的左递归性克服回溯,国防科技大学计算机系602教研室,构造不带回溯的自上而下分析器分析程序由一组递归过程组成,文法中每个非终结符对应一个过程;所以这样的分析程序称为递归下降分析器。(因为文法的定义通常是递归的)几个全局过程和变量:ADVANCE,把输入串指示器IP指向下一个输入符号,即读入一个单字符号SYM,IP当前所指的输入符号ERROR,出错处理子程序,国防科技大学计算机系602教研室,例:文法G(E):ETEE+TE|TFT T*FT|F(E)|i每个非终结符有对应的子程序的定义,首先在分析过程中,当需要从某个非终结符出发进行展开(推导)时,就调用这个非终结符对应的子程序。,国防科技大学计算机系602教研室,对应的递归下降子程序为:,PROCEDURE E;BEGIN T;EEND;,PROCEDURE T;BEGIN F;TEND,PROCEDURE E;IF SYM=+THEN BEGINADVANCE;T;E END,PROCEDURE T;IF SYM=*THENBEGIN ADVANCE;F;TEND;,国防科技大学计算机系602教研室,PROCEDURE F;IF SYM=i THEN ADVANCE ELSE IF SYM=(THEN BEGIN ADVANCE;E;IF SYM=)THEN ADVANCE ELSE ERROR END ELSE ERROR;,国防科技大学计算机系602教研室,主程序:PROGRAM PARSER;BEGIN ADVANCE;E;IF SYM#THEN ERROREND;,国防科技大学计算机系602教研室,对应的递归下降子程序为:,ETE|BCPROCEDURE E;BEGINIF SYM FIRST(TE)THEN T;EELSE IF SYM FIRST(BC)THENB;CELSE ERROREND;,国防科技大学计算机系602教研室,ETE E+TE|TFT T*FT|F(E)|I对应的递归下降子程序为:,PROCEDURE E;BEGIN T;EEND;,PROCEDURE T;BEGIN F;TEND,国防科技大学计算机系602教研室,对应的递归下降子程序为:,PROCEDURE E;IF SYM=+THEN BEGINADVANCE;T;E END ELSE IF SYM#AND SYM)THEN ERROR,国防科技大学计算机系602教研室,对应的递归下降子程序为:,PROCEDURE T;IF SYM=*THEN BEGIN ADVANCE;F;T END ELSE IF SYM#AND SYM)AND SYM+THEN ERROR,国防科技大学计算机系602教研室,PROCEDURE F;IF SYM=i THEN ADVANCE ELSE IF SYM=(THEN BEGIN ADVANCE;E;IF SYM=)THEN ADVANCE ELSE ERROR END ELSE ERROR;,国防科技大学计算机系602教研室,主程序:PROGRAM PARSER;BEGIN ADVANCE;EEND;,国防科技大学计算机系602教研室,在元符号“”和“|”的基础上,扩充几个元语言符号:1.用花括号表示闭包运算*。2.用表示0n可任意重复0次至n次,。3.用方括号表示01,即表示的出现可有可无(等价于|)。引入上述元符号的文法亦称扩充的巴科斯范式。,文法的另一种表示法和转换图,国防科技大学计算机系602教研室,例如,通常的“实数”可定义为:decimalsigninteger.digitexponent exponentEsigninteger integerdigitdigit sign+|-用扩充的巴科斯范式来描述语法,直观易懂,便于表示左递归消去和因子提取。,国防科技大学计算机系602教研室,例4.5 文法ET|E+TTF|T*FFi|(E)可表示成ET+TTF*FFi|(E)(4.6),国防科技大学计算机系602教研室,ET+TTF*FFi|(E)(4.6)可以用语法图来表示语言的文法。,国防科技大学计算机系602教研室,可构造一组递归下降分析程序:,PROCEDURE E;BEGIN T;WHILE SYM=+DO BEGIN ADVANCE;T ENDEND;,PROCEDURE T;BEGIN F;WHILE SYM=*DO BEGIN ADVANCE;F ENDEND;,PROCEDURE F;同前,见图4.2。,国防科技大学计算机系602教研室,4.5 预测分析程序,一、预测分析程序工作原理预测分析程序或LL(1)分析法:总控程序分析表 MA,a矩阵,A VN,a VT 是终结符或,分析栈 STACK 用于存放文法符号,国防科技大学计算机系602教研室,国防科技大学计算机系602教研室,总控程序根据现行栈顶符号X和当前输入符号a,执行下列三种动作之一:1.若Xa,则宣布分析成功,停止分析。2.若Xa,则把X从STACK栈顶逐出,让a指向下一个输入符号。,国防科技大学计算机系602教研室,3.若X是一个非终结符,则查看分析表M。若MX,a中存放着关于X的一个产生式,把X逐出STACK栈顶,把产生式的右部符号串按反序一一推进STACK栈(若右部符号为,则意味不推什么东西进栈)。在把产生式的右部符号推进栈的同时应做这个产生式相应的语义动作。若MX,a中存放着“出错标志”,则调用出错诊察程序ERROR。,国防科技大学计算机系602教研室,预测分析程序的总控程序:BEGIN 首先把然后把文法开始符号推进STACK栈;把第一个输入符号读进a;FLAG:=TRUE;WHILE FLAG DOBEGIN 把STACK栈顶符号上托出去并放在X中;IF XVT THEN IF X=a THEN 把下一输入符号读进a ELSE ERROR,国防科技大学计算机系602教研室,ELSE IF X=#THEN IF X=a THEN FLAG:=FALSE ELSE ERROR ELSE IF MX,a=XX1X2XkTHEN 把Xk,Xk-1,X1一一推进STACK栈/*若X1X2Xk=,不推什么进栈*/ELSE ERROR END OF WHILE;STOP/*分析成功,过程完毕*/END,国防科技大学计算机系602教研室,例4.6 对于文法G(E)ETEE+TE|TFT T*FT|F(E)|i输入串为i1*i2+i3,利用分析表进行预测分析:,国防科技大学计算机系602教研室,步骤符号栈输入串所用产生式0#Ei1*i2+i3#1#ETi1*i2+i3#ETE2#ETFi1*i2+i3#TFT3#ETii1*i2+i3#Fi4#ET*i2+i3#5#ETF*i2+i3#T*FT6#ETF i2+i3#7#ETii2+i3#Fi,国防科技大学计算机系602教研室,步骤符号栈输入串所用产生8#ET+i3#9#E+i3#T10#ET+i3#E+TE11#ETi3#12#ETF i3#TFT13#ETii3#Fi14#ET#15#E#T16#E,国防科技大学计算机系602教研室,二、分析表MA,a的构造,构造FIRST()和FOLLOW(A)构造分析表MA,a,国防科技大学计算机系602教研室,构造FIRST(),国防科技大学计算机系602教研室,对每一文法符号XVTVN构造FIRST(X)连续使用下面的规则,直至每个集合FIRST不再增大为止:1.若XVT,则FIRST(X)X。2.若XVN,且有产生式Xa,则把a加入到FIRST(X)中;若X也是一条产生式,则把也加到FIRST(X)中。,国防科技大学计算机系602教研室,3.若XY是一个产生式且YVN,则把FIRST(Y)中的所有非-元素都加到FIRST(X)中;若XY1Y2Yk是一个产生式,Y1,Yi-1都是非终结符,而且,对于任何j,1ji-1,FIRST(Yj)都含有(即Y1Yi-1),则把FIRST(Yi)中的所有非-元素都加到FIRST(X)中;特别是,若所有的FIRST(Yj)均含有,j1,2,k,则把加到FIRST(X)中。,国防科技大学计算机系602教研室,对文法G的任何符号串=X1X2Xn构造集合FIRST()。1.置FIRST()FIRST(X1);2.若对任何1ji-1,FIRST(Xj),则把FIRST(Xi)加至FIRST()中;特别是,若所有的FIRST(Xj)均含有,1jn,则把也加至FIRST()中。显然,若则FIRST()。,国防科技大学计算机系602教研室,构造FOLLOW(A),国防科技大学计算机系602教研室,对于文法G的每个非终结符A构造FOLLOW(A)的办法是,连续使用下面的规则,直至每个FOLLOW不再增大为止:1.对于文法的开始符号S,置于FOLLOW(S)中;2.若AB是一个产生式,则把FIRST()加至FOLLOW(B)中;,3.若AB是一个产生式,或AB是一个产生式而(即FIRST(),则把FOLLOW(A)加至FOLLOW(B)中。,国防科技大学计算机系602教研室,例4.6 对于文法G(E)ETEE+TE|TFT T*FT|F(E)|i构造每个非终结符的FIRST和FOLLOW集合:,FIRST(E)=(,iFIRST(E)=+,FIRST(T)=(,iFIRST(T)=*,FIRST(F)=(,i,FOLLOW(E)=),#FOLLOW(E)=),#FOLLOW(T)=+,),#FOLLOW(T)=+,),#FOLLOW(F)=*,+,),#,国防科技大学计算机系602教研室,在对文法G的每个非终结符A及其任意候选都构造出FIRST()和FOLLOW(A)之后,现在可以用它们来构造G的分析表MA,a。1.对文法G的每个产生式A执行第2步和第3步;2.对每个终结符a FIRST(),把A加至MA,a中;3.若FIRST(),则对任何bFOLLOW(A)把A加至MA,b中。4.把所有无定义的MA,a标上“出错标志”。,国防科技大学计算机系602教研室,国防科技大学计算机系602教研室,如果G是左递归或二义的,那么,M至少含有一个多重定义入口。因此,消除左递归和提取左因子将有助于获得无多重定义的分析表M。可以证明,一个文法G的预测分析表M不含多重定义入口,当且仅当该文法为LL(1)的。,国防科技大学计算机系602教研室,一个文法G为LL(1)的,当且仅当对于文法G中每一个非终结符A的任何两个产生式A|,下面的条件成立:1.FIRST()FIRST(),2.若(即FIRST(),则FIRST()FOLLOW(A)=。,国防科技大学计算机系602教研室,G(S):S iCtS|iCtSeS|aC b提取左因子之后,改写成:G(S):S iCtSS|aS eS|C b,国防科技大学计算机系602教研室,作业,P811,2P823(选作),

    注意事项

    本文(第四部分语法分析自上而下分析.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开