语法分析-自顶向下分析.ppt
《语法分析-自顶向下分析.ppt》由会员分享,可在线阅读,更多相关《语法分析-自顶向下分析.ppt(70页珍藏版)》请在三一办公上搜索。
1、第四章 语法分析自顶向下分析(P61),4.1 自顶向下分析方法4.2 FIRST集合和FOLLOW集合4.3 递归下降分析4.4 LL(1)分析方法,学 习 重 点,FIRST集合和FOLLOW集合的求法递归子程序的构造方法 LL(1)文法及其分析表的构造方法,第四章 语法分析自顶向下分析,语法:是指如何由语言基本符号组成程序中各个语法成分(包括程序)的一组规则。,语法分析与词法分析的区别:语法分析和词法分析都是对输入符号串的识别,但词法分析的输入符号串是一个单词,而语法分析的输入符号串是一个句子或者说是一个程序。,语法分析任务:检查源程序语法上是否正确,并生成相应的内部表示(如分析树)供下
2、一阶段使用。,例 对于C程序语句“if(a10)b=5;”,词法分析识别出了if、(、a、等单词符号,而语法分析则要检查这些单词之间的搭配、结构是否正确,例如if后面是否为(,(后面是否为正确的表达式等等。,第四章 语法分析自顶向下分析,语法分析方法的分类(分类标准是按照识别句子时建立语法树的方法):,回溯示例,4.1自顶向下的分析方法(P61),自顶向下的分析方法就是从文法的开始符号出发,按最左推导方式向下推导,试图推导出要分析的输入串。即:开始符号 输入符号串,+,自底向上的分析方法从输入符号串开始,按最左归约方式向上归约到文法的开始符号。即:开始符号 输入符号串,归约,SaASaAaaS
3、bAaaSbbaaaabbaa,自上而下,自底向上,输入串,开始符号,图示:自上而下分析与自底向上分析,4.2 FIRST集合和FOLLOW集合(P62),FIRST集合定义:假定是文法G的任一符号串,则:FIRST()=a|a,aVt若,则规定FIRST()。,*,*,实际上,FIRST()就是从可能推导出的所有开头终结符号或。,文法符号的FIRST集合构造方法:对于文法中的符号XV,其FIRST(X)集合可反复应用下列规则计算,直到其FIRST(X)集合不再增大为止:1)若XVt,则FIRST(X)=X。2)若XVn,且具有形如Xa的产生式(aVt),或具有形如X的产生式,则把a或加进FI
4、RST(X)。3)设G中有形如XY1Y2Yk的产生式,若Y1Vn,则把FIRST(Y1)中的一切非符号加进FIRST(X);对于一切2ik,若Y1,Y2,Yi-1均为非终结符号,且FIRST(Yj),1ji-1,则将FIRST(Yi)中的一切非符号加进FIRST(X);但若对一切1ik,均有FIRST(Yi),则将符号加进FIRST(X)。,文法符号的FIRST集合构造方法:对于文法中的符号XV,其FIRST(X)集合可反复应用下列规则计算,直到其FIRST(X)集合不再增大为止:1)若X为终结符,则将X加入FIRST(X)集合中。2)若X为非终结符,且具有形如Xa的产生式(aVt),或具有形
5、如X的产生式,则把a或加进FIRST(X)。3)设X为非终结符且有形如XY1Y2Yk的产生式,若Y1Vn,则把FIRST(Y1)中的一切非符号加进FIRST(X);对于一切2ik,若Y1,Y2,Yi-1均为非终结符号,且FIRST(Yj),1ji-1,则将FIRST(Yi)中的一切非符号加进FIRST(X);但若对一切1ik,均有FIRST(Yi),则将符号加进FIRST(X)。,对于文法G的任一符号串=X1X2Xn可按下列步骤构造其FIRST()集合:1)置FIRST()=;2)将FIRST(X1)中的一切非符号加进FIRST();3)若FIRST(X1),将FIRST(X2)中的一切非符号
6、加进FIRST();若FIRST(X1)和FIRST(X2),将FIRST(X3)中的一切非符号加进FIRST();其余类推。4)若对于一切1in,FIRST(Xi),则将符号加进FIRST()。,4.2 FIRST集合和FOLLOW集合,例4-1(P62)有文法:ETE E+TE E TFT T*FT T F(E)|i 求文法中非终结符号以及各产生式右部符号串的FIRST集。,解:该文法的非终结符号有E、E、T、T和F。FIRST(E)=FIRST(TE)=FIRST(FTE)=(,i FIRST(+TE)=+FIRST()=FIRST(E)=FIRST(+TE)FIRST()=+,FIRS
7、T(T)=FIRST(FT)=(,i FIRST(*FT)=*FIRST(T)=FIRST(*FT)FIRST()=*,FIRST(E)=(FIRST(i)=i FIRST(F)=FIRST(E)FIRST(i)=(,i,4.2 FIRST集合和FOLLOW集合,例S:=aABbcd|A:=ASd|B:=SAh|eC|C:=Sf|Cg|求此文法的每一个非终结符号的FIRST集。,解:FIRST(S)=FIRST(aABbcd)FIRST()=a=a,FIRST(A)=FIRST(ASd)FIRST()=a,d=a,d,FIRST(B)=FIRST(SAh)FIRST(eC)FIRST()=a,
8、d,he=a,d,h,e,FIRST(C)=FIRST(Sf)FIRST(Cg)FIRST()=a,fa,f,g=a,f,g,4.2 FIRST集合和FOLLOW集合,练习 S:=aAcB|BdA:=AaB|cB:=bBcA|b|求此文法的每一个非终结符号的FIRST集。,解:FIRST(S)=FIRST(aAcB)FIRST(Bd)=ab,d=a,b,dFIRST(A)=FIRST(AaB)FIRST(c)=cc=cFIRST(B)=FIRST(bBcA)FIRST(b)FIRST()=bb=b,4.2 FIRST集合和FOLLOW集合,FOLLOW集合定义(P63):假定S是文法的开始符号
9、,对于G的任何非终结符号A,则:FOLLOW(A)=a|S Aa,aVt 若S A,则规定#FOLLOW(A)。,*,*,从定义可看出,FOLLOW(A)就是在所有句型中出现在紧接A之后的终结符号或#。注意:在FOLLOW集合中无。,4.2 FIRST集合和FOLLOW集合,对于文法中的符号AVn,其FOLLOW(A)集合可反复应用下列规则计算,直到其FOLLOW(A)集合不再增大为止:1)对于文法的开始符号S,令#FOLLOW(S)2)若G中有形如AB 的产生式,且,则将FIRST()中的一切非符号加进FOLLOW(B)。3)若G中有形如AB或AB 的产生式,且FIRST(),则FOLLOW
10、(A)中的全部元素均属于FOLLOW(B),即FOLLOW(A)FOLLOW(B)。,例 设文法GS:S:=SbA|aAA:=BcB:=Sb求此文法的每一个非终结符号的FOLLOW集。,解:1.因为S为文法的开始符号,所以#FOLLOW(S);由S:=SbA,有FIRST(bA)=bFOLLOW(S);由B:=Sb,有FIRST(b)=bFOLLOW(S);因此,FOLLOW(S)=b,#。2.由S:=SbA或S:=aA,有FOLLOW(S)FOLLOW(A)。因此,FOLLOW(A)=b,#。3.由A:=Bc,有FIRST(c)=cFOLLOW(B)。因此,FOLLOW(B)=c。,4.2
11、FIRST集合和FOLLOW集合,例4-2(P63)有文法 ETE,E+TE,E,TFT,T*FT,T,F(E)|i,求各非终结符号的FOLLOW集。,解:FOLLOW(E)=#FIRST()=),#FOLLOW(E)=FOLLOW(E)=),#FOLLOW(T)=(FIRST(E)-)FOLLOW(E)FOLLOW(E)=+,),#FOLLOW(T)=FOLLOW(T)=+,),#FOLLOW(F)=(FIRST(T)-)FOLLOW(T)FOLLOW(T)=*,+,),#,4.2 FIRST集合和FOLLOW集合,练习 已知文法GS:S:=AA:=BAA:=iBA|B:=CBB:=+CB|
12、C:=)A*|(求FOLLOW(C)。,解:FOLLOW(C)=(FIRST(B)-)FOLLOW(B)FOLLOW(B)=+,i,*,#,自顶向下语法分析遇到的问题,(1)左递归问题 当文法中出现左递归时(存在非终结符号U,对于它有U:=U(直接左递归),或U U(间接左递归),它会使分析过程陷入无限循环。,(2)回溯问题 如果对于同一个非终结符号,存在若干个产生式右部(如U:=x1|x2|xn)时,要对U展开,那么按哪一个产生式右部展开呢?即如何确定替换U的xi。如果选择错误,将导致回溯。,+,回溯示例,自顶向下语法分析问题的解决方法,(1)消除左递归消除直接左递归方法1:采用扩充BNF范
13、式 设有文法产生式 U:=Ux|y 可改写为:U:=yx方法2:引进新的非终结符号 设有文法产生式 U:=Ux1|Ux2|Uxm|y1|y2|yn其中,yi(i=1,2,n)均不以符号U为首,引进一个新的非终结符号U,将上述产生式等价变换为:U:=y1U|y2U|ynU U:=x1U|x2U|xmU|,自顶向下语法分析问题的解决方法,例4-4(P65)有文法:E:=E+T|E-T|T,T:=T*F|T/F|F,为其设计递归分析程序。,方法1:采用扩充BNF范式 E:=E+T|E-T|T 可改成 E:=T+T|-T T:=T*F|T/F|F 可改成 T:=F*F|/F,方法2:引进新的非终结符号
14、E:=E+T|E-T|T 可改成 E:=TE,E:=+TE|-TE|T:=T*F|T/F|F 可改成 T:=FT,T:=*FT|/FT|,解:先消除文法中的直接左递归。,自顶向下语法分析问题的解决方法,(2)避免回溯 为了避免回溯,对于文法中的任一非终结符号U,若U:=x1|x2|xn,要求满足以下两个条件:相对于x1,x2,xn的各符号串的终结首符号集总是两两互不相交的,即 FIRST(xi)FIRST(xj)=(ij)因为每一个xi推出的第一个终结符号均不相同,它能保证只会选择惟一的一个xi来替换U。,例 设文法GA:A:=aB|aC,B:=b,C:=cFIRST(aB)FIRST(aC)
15、=aa=a 采用自顶向下的语法分析时会引起回溯,例如推导句子ac将导致回溯。,自顶向下语法分析问题的解决方法,(2)避免回溯 如果xj,则有可能选择此xj来替换U,而让句型中U后面的第一个终结符号与当前输入符号匹配,这样有可能回溯。若规定文法不含规则,则对文法的要求太高,因此用 FIRST(xi)FOLLOW(U)=来限制文法,保证只会选择惟一的一个xi来替换U。,*,例 设文法为:S:=bAB,A:=aC|,B:=aB|,C:=cFIRST(aC)FOLLOW(A)=aa,#=a采用自顶向下的语法分析时会引起回溯,例如推导句子baa将导致回溯。,自顶向下语法分析问题的解决方法,(2)避免回溯
16、以上避免回溯的两个条件等价于:SELECT(U:=xi)SELECT(U:=xj)=(ij)其中:SELECT(U:=xk)定义为:,(i,j,k=1,2,n),SELECT(U:=xk),自顶向下语法分析问题的解决方法,消除文法回溯的方法:消除文法的左递归;提公共因子;例如U:=xy|xz,则提公共因子,有U:=x(y|z),再引进新的非终结符号V,U:=xy|xz可改写为:U:=xV,V:=y|z。根据文法的具体情况进行等价变换。,采用自顶向下语法分析法对文法的要求,采用自顶向下语法分析法要求文法满足压缩、无左递归、无回溯这三个条件,称满足这三个条件的文法为LL(1)文法。,证明:因为是左
17、递归文法,所以必存在左递归的非终结符A及形如A:=A|(可为)。由于SELECT(A:=A)SELECT(A:=),所以左递归文法不满足LL(1)文法条件。,推论1:任何左递归文法均不是LL(1)文法。,采用自顶向下语法分析法对文法的要求,推论2:任何LL(1)文法均为无二义性文法。,证明:LL(1)文法在分析句子过程的每一步,永远只有惟一的分析动作可进行。现在,假设文法G是二义性文法,则存在句子,它有两棵不同的语法树,即存在着两个不同的最左推导。从而可知,用LL(1)方法对句子进行分析的某步,存在两种不同的产生式可用于推导,且均能正确进行语法分析,即LL(1)分析动作存在不确定性。这与LL(
18、1)的性质相矛盾。所以,文法G不是LL(1)文法。,采用自顶向下语法分析法对文法的要求,例 验证下列文法是否为LL(1)文法。GS:S:=AB|CDa A:=ab|c B:=dD|C:=eC|D:=fD|f,解:显然,文法G已压缩且无左递归。下面判断其是否有回溯。由D:=fD|f,有:SELECT(D:=fD)SELECT(D:=f)=FIRST(fD)FIRST(f)=ff=f 该文法不是LL(1)文法。,采用自顶向下语法分析法对文法的要求,练习(见P77习题4的第2小题)有文法GA:A:=aABe|B:=Bb|b判断该文法是LL(1)文法吗?,解:文法中存在左递归B:=Bb该文法不是LL(
19、1)文法。,4.3 递归下降分析(P64),递归下降分析(或递归子程序分析)的基本方法 其思路极为简单:为每个非终结符号构造一个子程序,以完成该非终结符号所对应的语法成分的分析和识别。,1.若U的右部只有一个候选式,则按从左向右的顺序构造U的识别过程代码。(1)若有终结符号,则判断与输入符号是否匹配,如果相同,继续读入下一符号,否则就意味着有语法错误;(2)若有非终结符号,则调用该符号的子程序。2.若U的右部有多个候选式,则根据每个候选式的第一个符号确定该候选式分支。3.只有输入串的每一个符号全部匹配成功,且正确返回时,该语法成分才算真正获得识别。,4.3 递归下降分析,总控程序可描述如下:b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语法分析 向下 分析

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