《语法分析》PPT课件.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《《语法分析》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《语法分析》PPT课件.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章 语法分析和语法分析程序对象:单词流形式的源程序任务:根据语法规则,分析源程序的语法结构,同时进行语法检查输出:语法树假定:先不考虑语义问题常见分析方法:自顶向下()和自底向上():递归下降法,预测分析法(LL分析法):优先分析法,LR分析法 自顶向下自顶向下的语法分析:对已给的输入串对已给的输入串w,试图自试图自上而下地建立一棵语法树上而下地建立一棵语法树;或或者说者说,从从S出发出发,为为w构造一个构造一个最左推导最左推导.若成功若成功,则则w L(G),否则拒绝否则拒绝.一般说来一般说来,在为在为w寻求最左推寻求最左推导的每一步导的每一步,都涉及使用何产都涉及使用何产生式进行替换的
2、问题生式进行替换的问题.最简单最简单的方法是的方法是,逐一逐一试探试探.遗憾的是遗憾的是,逐一试探也不能完逐一试探也不能完全解决问题全解决问题.例如例如,在含有在含有左递左递归归的文法中的文法中,就会出现不能终就会出现不能终止的替换现象止的替换现象.例例:ET|EAT TF|TMF F(E)|i A+|-M*|/(4.1)设设w=i+i*i,每个产生式从每个产生式从左至右试验左至右试验.从从E出发出发:ETF(E)i TMFFMF(E)MF iMF i*F i/F TMFMF TMFMFMF.自顶向下分析方法的特点1.若G有左递归,则分析不能正常进行.因此,分析必须必须先消除文法的左递归先消除
3、文法的左递归;2.分析过程是反复进行试探的过程,因此,难免会出现大量的回溯.特别是当w L(G)时,只有在穷举完所有的试探后才能拒绝w.由于回溯,就需将从出错点到迄今为止已做过的大量工作废弃,显然会大大降低分析的效率降低分析的效率.特别是在语法分析阶段还往往要进行同步的语义分析和处理,这些工作也就白做了.因此,消除回溯消除回溯是 分析分析的另一目标.3.当拒绝w时,只能知道w不是句子,不知出何错及出在何处 消除文法的左递归设文法是已简化的设文法是已简化的.若文若文法含直接左递归式法含直接左递归式:AA|(V+),引入新的非引入新的非终结符终结符A,令其产生令其产生*,则则有有:A A A A|
4、由于由于 不以不以A打头打头,A非左非左递归递归.对对P105的文法的文法(4.1),可可改写为改写为ETE EATE|TFT TMFT|F(E)|i A+|-M*|/一般地一般地,设文法中全部设文法中全部A-A-产产生式为生式为AA 1|A 2|A n|1|m,其中其中,i不以不以A打头打头,则消除直接左递归后则消除直接左递归后的产生式为的产生式为 A1A|mA 及A 1A|nA上述方法可消除直接左递归上述方法可消除直接左递归,但对于但对于间接左递归间接左递归的文法来的文法来说说,需将原文法进行需将原文法进行变换变换后后才适用才适用.例如例如,S Ab|c ASa,可将其变换为可将其变换为S
5、 Sab|c,再使用上述方法再使用上述方法,得得S cSS abS 回溯的消除及LL(1)文法为解决回溯问题为解决回溯问题,我们从句子的我们从句子的最左推导开始讨论最左推导开始讨论.设设G=(VN,VT,P,S)G=(VN,VT,P,S)为一为一CFGCFG,w=aw=a1 1a a2 2aan n是是V VT T上的符号串上的符号串,现现需判明需判明w w是否是是否是L(G)L(G)中的句子中的句子.为此为此,从从S S注意注意,i=1时时,w1=,A=S由假设可知由假设可知,到目前为止到目前为止,w的前的前缀缀w1已匹配已匹配,现在需对现在需对A 进行进行推导推导.对于当前输入符号对于当前
6、输入符号a ai i,若只有一个若只有一个 j j(称为候选式称为候选式)使得从使得从 j j 出发可出发可以推导出一个以以推导出一个以a ai i打头的符号串打头的符号串:而其它的而其它的 k k(k(k j),j),k k 都推导不出都推导不出以以a ai i打头的符号串打头的符号串,则选定产生式则选定产生式A A j j就是唯一可行的推导就是唯一可行的推导,即即w w L(G)L(G)选选A Aj j正确正确;w w L(G)L(G)选任何产生式均不能匹配选任何产生式均不能匹配显然显然,若若P P中产生式能满足上述要求中产生式能满足上述要求,则则回溯可消除回溯可消除为得到为得到w w的剩
7、余部分的剩余部分a ai ia ai+1i+1aan n.由最由最左推导的定义左推导的定义,考虑考虑A A的所有产生式的所有产生式:消除回溯回溯的条件由前面的讨论可知,要实现由前面的讨论可知,要实现无回溯无回溯的的 分析分析,文法必须满足一定的文法必须满足一定的条件条件。为导出这些条件。为导出这些条件,我们定义候选式的我们定义候选式的终结首符集终结首符集FIRST()=a|*a,a VT,V*并约定并约定*时时,FIRST()若对于若对于A-产生式的每个产生式的每个候选式候选式 i(i=1,2,m)都推不出都推不出 ,且且 FIRST(i)互不相交互不相交,则当正扫描的当前输入符号为则当正扫描
8、的当前输入符号为ai FIRST(j)时时,唯一可用于推导的产生式只能是唯一可用于推导的产生式只能是Aj.例如例如,文法文法G1S:SAAAaAb|*,A-产生式有两个产生式有两个候选式候选式,且且FIRST(aAb)=aFIRST(*)=*,两集两集不相交不相交,设输入串为设输入串为aa*bb*,其最左推导为其最左推导为 SAA (a)aAbA (a)aaAbbA(*)aa*bbA (*)aa*bb*(#)注注:上面第每步推导右侧括号内为当前扫描的输入符号上面第每步推导右侧括号内为当前扫描的输入符号,#,#为结束符为结束符.我们得到了一个无回溯的条件我们得到了一个无回溯的条件:FIRST(i
9、)FIRST(j)=消除回溯回溯的条件然而还存在另外一种情况然而还存在另外一种情况,可能存在某个候选式可能存在某个候选式 i i,i i*,即即FIRST(FIRST(i)i)(这样的是唯一的这样的是唯一的(?!)(?!),此时此时,为匹为匹配当前扫描的符号配当前扫描的符号a a就可能有就可能有两种选择两种选择,一是存在某一是存在某 j j,使使 j j推导出以推导出以a a打头的符号串打头的符号串,另一种选择是让另一种选择是让A A推导出推导出 i i,并让并让跟随在跟随在A A后的符号串推导出以后的符号串推导出以a a打头的符号串打头的符号串.若这两种选择都可行若这两种选择都可行,则回溯不
10、可避免则回溯不可避免.因此因此,就必须要求就必须要求当当 i i*时时,跟在跟在A A后的符号串不能推导出其它后的符号串不能推导出其它 j j 所能推所能推导出的首终结符符号串导出的首终结符符号串.为此为此,我们定义我们定义可紧跟在可紧跟在可紧跟在可紧跟在A A A A后的所后的所后的所后的所有终结符之集有终结符之集有终结符之集有终结符之集FOLLOW(A)=a|S#FOLLOW(A)=a|S#FOLLOW(A)=a|S#FOLLOW(A)=a|S#*AaAaAaAa ,a,a,a,a VTVTVTVT#,#,#,#,V*V*V*V*其中其中,当当A A为一句型的尾符号时为一句型的尾符号时,#
11、,#,#,#FOLLOW(A).FOLLOW(A).FOLLOW(A).FOLLOW(A).现在现在,我们可把无回溯的我们可把无回溯的另一条件另一条件描述为描述为:若若 i i*,则则FOLLOW(A)FOLLOW(A)FOLLOW(A)FOLLOW(A)与其它的与其它的 j j j j互不相交互不相交:FOLLOW(A)FOLLOW(A)FOLLOW(A)FOLLOW(A)FIRST(FIRST(FIRST(FIRST(j)=j)=j)=j)=.消除回溯回溯的条件例 SaA|b AcAS|FIRST(cAS)=c FOLLOW(A)FIRST(cAS)=c FOLLOW(A)=FIRST(S
12、)=FIRST(S)#=a,b,#=a,b,#两个集合不相交,故可进行无回溯的分析.设输入串w=aca#w=aca#,其推导过程如下:S#aA#当前输入符a属于FIRST(aA),用SaA推导 acAS#当前输入符c属于FIRST(cAS),用AcAS推导 acS#当前输入符a属于FOLLOW(A),用A推导.acaA#当前输入符a属于FIRST(aA),用SaA推导 aca#当前输入符#属于FOLLOW(A),用A推导,成功。最后最后,我们将消除回溯的条件归纳为我们将消除回溯的条件归纳为,对对G G中每个中每个A A V VT T,A-,A-产生式中任何两产生式中任何两个候选式个候选式 i
13、i,j j,均满足均满足:(1)FIRST(i)FIRST(j)=(ij 1i,jm)(2)i,j中,至多有一个能推导出;(3)若j*,则FIRST(i)FOLLOW(A)=(i=1,2,m ij)注注:条件条件(2)(2)可省略可省略.即即(1)(1)(2)(2)我们把满足上述条件的文法称为我们把满足上述条件的文法称为LL(1)LL(1)LL(1)LL(1)文法文法文法文法 递归下降分析法递归下降分析法(recursive descent method)的原理是,对于文法的每个非终结符,根据其各候选式的结构,为其建立一个递归的子程序(函数),用于识别该非终结符所表示的语法范畴.例如,产生式E
14、+TE,相应的子程序(函数)为expr_prime()if(match(PLUS)advance();term();expr_prime();程序中,函数match()的功能是,以其实参与当前正扫描的符号进行匹配,若成功则返回1,否则返回0;advance()是读下一单词函数,将所读单词赋给变量变量lookahead;term()函数是与非终结符T相对应的子程序.对于文法的每个非终结符,都建立了子程序后,这组子程序组成了所需的自顶向下语法分析程序.注意注意,由于文法的递归性,子程序一定有递归递归.因此,只能使用允许递归的程序设计语言编写.由于程序有递归,通常,上述方法也称为递归子程序法递归子程
15、序法什么是LL(1)文法一个上下文无关文法若满足下列条件(1)文法不含有左递归;(2)文法的每个非终结符A的各个产生式的first集和Follow集不相交,即满足first(A)follow(A)则称此文法为LL(1)文法。第一个L表示它从左到右扫描输入串,第二个L表示采用最左推导,1表示分析时每次直接推导只需向前察看一个字符。LL(1)分析方法)分析方法预测分析法的分析器由一张预测分析表预测分析法的分析器由一张预测分析表(LL(1)(LL(1)分析表分析表),),一个控制程序一个控制程序(表驱动程表驱动程序序)及一分析栈组成及一分析栈组成控制程序分析表分析表XYZ#分析栈a1 a2 ai a
16、n#输入4 输入是待分析的符号串(单词流),输入是待分析的符号串(单词流),以以#结尾。结尾。4分析表是一二维数组,分析表是一二维数组,M:VNM:VN(VT(VT#)#)(P(P ERR),ERR),MA,aMA,a的值按下述规则确定的值按下述规则确定:对于每个对于每个产生式产生式A A1|1|2|2|m m4(1)(1)若若a a FIRST(FIRST(i),i),则置则置MA,a=“AMA,a=“Ai”;i”;4(2)(2)FIRST(FIRST(i),ai),a FOLLOW(A),FOLLOW(A),置置MA.a=“AMA.a=“Ai”,i”,4(3)(3)除上述两种情况外除上述两
17、种情况外,其它元素均填其它元素均填“ERR”.ERR”.4分析表元素的含义分析表元素的含义:指明当前应用何产生式进指明当前应用何产生式进行推导行推导,或指明输入串出现错误或指明输入串出现错误一、分析器分析器的工作原理的工作原理分析器对输入串的分析在控制程序的控制下进行,步骤如下:分析器对输入串的分析在控制程序的控制下进行,步骤如下:#Sa1 a2 an#2.设在分析的某时刻的分析格局为设在分析的某时刻的分析格局为#X1 X2 Xm-1 Xmai ai+1 an#c此时此时,根据当前栈顶符号根据当前栈顶符号Xm的不同情况的不同情况,分别作如下处理分别作如下处理:(1)Xm VT,且且Xm=ai,
18、则匹配则匹配,将将Xm 顶出栈顶出栈,输入指针输入指针+;否则否则(Xm ai),出错出错;(2)Xm VN 查表查表MXm,ai,若若MXm,ai=“ERR”,则出错则出错;若若MXm,ai=“Xm Y1Y2Yk”,则将则将Xm 出栈出栈,Y1Y2Yk 按逆序压入栈按逆序压入栈,得到格局得到格局1.初始化初始化.首先将首先将#及开始符及开始符S压入压入栈栈,各指针置初值各指针置初值.此时此时,格局为格局为#X1 X2 Xm-1YkYk-1.Y1ai ai+1 an#(3)若若X Xmm=a=ai i=#,=#,则表明输入串已完全得到匹配则表明输入串已完全得到匹配,分析成功分析成功分析成功分析
19、成功,结束结束.预测分析法预测分析法实例考虑文法考虑文法(4.1).各各个个 FIRST集与集与FOLLOW集如右表所集如右表所示示文法文法(4.1)相应的相应的LL(1)LL(1)分析表分析表分析表分析表见右见右注注:在分析表中我们在分析表中我们有意省略了左侧的有意省略了左侧的非终结符非终结符(why?why?).).在在实际的表存储时实际的表存储时,还还可用产生式编号表可用产生式编号表示示对对i+i*i进行预测分析的过程进行预测分析的过程二、构造FIRST集的算法对于对于G G中的每个文法符号中的每个文法符号X X,为求为求FIRST(X),FIRST(X),反复应用如下规则反复应用如下规
20、则,直到集合不再增大直到集合不再增大:(1)if (X X V VT T)FIRST(X)=X;(2)if(X X V VNN)if(XaP aVT)aFIRST(X);if(XP)FIRST(X);(3)if(X XY Y1 1Y Y2 2YYk k P P)if(Y1 1VN)FIRST(Y1 1)-FIRST(X);for(1 j k-1)if(YjVNFIRST(Yj j)FIRST(Yj)-FIRST(X);if(for(1 j k):FIRST(Yj)FIRST(X);V*,V*,=X1X2Xn,=X1X2Xn,求求FIRST(FIRST()类似于求类似于求X XY1Y2YkY1Y
21、2Yk,略略.构造构造FOLLOW集的算法集的算法FOLLOW:VFOLLOW:VFOLLOW:VFOLLOW:VN N N NV V V VT T T T#,反复使用如下规则,直到不再增大:1.#1.#FOLLOW(S);FOLLOW(S);2.if(A2.if(ABBP)FIRST(P)FIRST()-)-FOLLOW(B);FOLLOW(B);3.if(A3.if(ABB P)P)(A(ABB FIRST(FIRST()FOLLOW(A)FOLLOW(A)FOLLOW(B);FOLLOW(B);算法的证明:对于1.,由定义直接得到;对于2.,由于A是有用符号,则必存在含A的句型:S S*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语法分析 PPT 课件
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内