《编译原理与技术》课件-第4章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《编译原理与技术》课件-第4章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理与技术 编译 原理 技术 课件
- 资源描述:
-
1、编译原理与技术编译原理与技术第第4章章 自顶向下的语法分析自顶向下的语法分析 编译原理与技术编译原理与技术2主要内容主要内容u自顶向下语法分析概述自顶向下语法分析概述 uLL(1)文法文法u递归下降分析技术递归下降分析技术 u预测分析技术预测分析技术uLL(1)分析中的错误处理分析中的错误处理 编译原理与技术编译原理与技术34.1 自顶向下语法分析的一般方法自顶向下语法分析的一般方法u基本思想:基本思想:对任何输入串,试图用一切可能的办法,从对任何输入串,试图用一切可能的办法,从文法开始符号出发,自上而下,从左到右地文法开始符号出发,自上而下,从左到右地为输入串建立分析树。或者说,为输入串寻为
2、输入串建立分析树。或者说,为输入串寻找最左推导。找最左推导。u特点:特点:本质上是一种试探过程,反复使用不同的产本质上是一种试探过程,反复使用不同的产生式谋求匹配输入串。生式谋求匹配输入串。编译原理与技术编译原理与技术4例例4.1:设文法设文法GS:ScAd,Aab|a,输入串为,输入串为cad,自,自顶向下进行语法分析,并构造相应语法树。顶向下进行语法分析,并构造相应语法树。4.1 自顶向下语法分析的一般方法自顶向下语法分析的一般方法先按文法的开始符号产生根结点S,选择S惟一的产生式构造语法树,如图4.1(a)所示。把S的子结点从左到右与输入串中的字符相比较,第一个子结点c匹配输入串第一个符
3、号。第二个子结点是非终结符A,要选择A的产生式进一步构造。而A有两个候选式,先选择Aab构造语法树,如图4.1(b)所示。(a)(b)(c)图4.1 输入串cad的语法分析树编译原理与技术编译原理与技术5 此时A的最左子结点a匹配输入串第二个符号。而A的第二个子结点b和输入串第三个符号不一致,说明A的这个产生式不能用来产生该输入串。这就需要回到子结点A,选用另一个产生式Aa来构造语法树,如图4.1(c)所示。这种回头选用其他产生式的过程称为回溯。回溯时,要把由前面产生式Aab得到的子树删除,并重新读入在子结点A处的当时符号a。用新的产生式构造语法树后,A的子结点为a,与当前符号一致,读入最后一
4、个输入符号d。此时结点A完成匹配,它的右边是结点d,与当前符号一致。这样就完成了输入串的匹配,说明输入串cad是该文法的一个句子。上面的分析同时也给出了输入串cad的最左推导过程:S cAd cad。4.1 自顶向下语法分析的一般方法自顶向下语法分析的一般方法(a)(b)(c)编译原理与技术编译原理与技术6u这种一般方法存在一些问题:这种一般方法存在一些问题:(1)左递归问题左递归问题 自顶向下分析采取最左推导,文法中含有左递归会使自顶向下分析采取最左推导,文法中含有左递归会使自上而下的分析过程陷入无限循环。因此,必须消除文自上而下的分析过程陷入无限循环。因此,必须消除文法的左递归。法的左递归
5、。(2)回溯问题回溯问题 反复寻找可正确匹配的产生式时可能需要不断回溯,反复寻找可正确匹配的产生式时可能需要不断回溯,虚假匹配现象需要使用更复杂的回溯技术。这样将会产虚假匹配现象需要使用更复杂的回溯技术。这样将会产生许多额外工作,因此应设法消除回溯。生许多额外工作,因此应设法消除回溯。4.1 自顶向下语法分析的一般方法自顶向下语法分析的一般方法编译原理与技术编译原理与技术7(3)出错处理出错处理 分析不成功时,要确定出错的具体位置比较困难。分析不成功时,要确定出错的具体位置比较困难。(4)效率问题效率问题 这种带回溯的自顶向下方法实际上是一种穷尽一切可这种带回溯的自顶向下方法实际上是一种穷尽一
6、切可能的试探法,因此效率很低,代价较高,从而该方法只能的试探法,因此效率很低,代价较高,从而该方法只有理论意义,在实际应用中价值不大。有理论意义,在实际应用中价值不大。4.1 自顶向下语法分析的一般方法自顶向下语法分析的一般方法编译原理与技术编译原理与技术84.2 LL(1)文法文法要实现无回溯的自顶向下语法分析,对相应文法要实现无回溯的自顶向下语法分析,对相应文法必须要有一定的限制。首先,文法应该不含左递必须要有一定的限制。首先,文法应该不含左递归,若文法中含有左递归,则需使用文法的等价归,若文法中含有左递归,则需使用文法的等价变换消除左递归。其次,还要消除回溯。变换消除左递归。其次,还要消
7、除回溯。通过提取左因子消除某些文法的回溯,为什么?通过提取左因子消除某些文法的回溯,为什么?没有左递归和左因子的文法是否一定可以进行确没有左递归和左因子的文法是否一定可以进行确定的自顶向下分析?定的自顶向下分析?编译原理与技术编译原理与技术9u首符集首符集FIRST4.2 LL(1)文法文法例例4.2:文法文法G1S:SpA|qB AcAd|a BdB|bw1=pccadd自顶向下的推导过程:S pA pcAd pccAdd pccadd语法树:ddSpASpAcA dSpAcA dcA dSpAcAcAa编译原理与技术编译原理与技术104.2 LL(1)文法文法文法文法G1S:SpA|qB
8、AcAd|a BdB|b这个文法的特点:这个文法的特点:每个产生式的右部都由终结每个产生式的右部都由终结符号开始。符号开始。如果两个产生式有相同的左如果两个产生式有相同的左部,那么它们的右部由不同部,那么它们的右部由不同的终结符开始。的终结符开始。对于这样的文法,分析输入串时,可以跟据输入串的当前符号确定选取产生式。比如w1=pccadd,第一个符号是p,而从开始符号S出发,只有选择产生式SpA推导,才能出现符号p。同样,要出现第二个符号c,必须选择产生式AcAd。这样,虽然具有相同左部的产生式不只一个,但文法的特点决定了每一步推导只能选择惟一的产生式,从而可以避免回溯。编译原理与技术编译原理
9、与技术114.2 LL(1)文法文法 例例4.3:文法文法G2S:SAa|Bb Aa|cA Bb|dBw2=ccaa自顶向下的推导过程:S Aa cAa ccAa ccaa语法树:SAaSAacASAacAcASAacAcAa编译原理与技术编译原理与技术124.2 LL(1)文法文法文法文法G2S:SAa|Bb Aa|cA Bb|dB这个文法的特点:这个文法的特点:每个产生式的右部不全是由每个产生式的右部不全是由终结符号开始。终结符号开始。如果两个产生式有相同的左如果两个产生式有相同的左部,那么它们的右部由不同部,那么它们的右部由不同的终结符或非终结符开始。的终结符或非终结符开始。文法中无空产
10、生式。文法中无空产生式。对于这样的文法,分析输入串时,也可以跟据输入串的当前符号确定地选取产生式。比如推导w2=ccaa时,首先考虑开始符号S,它可以推出以A或B开头的符号串。而由以A和B为左部的产生式可知,A只能推出以a,c开头的符号串,B只能推出以b,d开头的符号串。因此,要得到w2的第一个符号c,只有选择产生式SAa,AcA。同样,要出现第二个符号c,仍需选择产生式AcA,没有别的选择。这样,文法的特点决定了每一步推导只能选择确定的产生式,从而可以避免回溯。编译原理与技术编译原理与技术13由上面两个例子可知,一个文法在推导过程中是否会产由上面两个例子可知,一个文法在推导过程中是否会产生回
11、溯,与文法中具有相同左部的每个产生式右部所能生回溯,与文法中具有相同左部的每个产生式右部所能推出的开头符号有关系。推出的开头符号有关系。定义定义4.1:设设G=(VN,VT,P,S)是上下文无关文法,对于是上下文无关文法,对于V*,V=VNVT,定义首符集,定义首符集FIRST()为为 FIRST()=a|,aVT,V*即即 FIRST()=a|a,aVT,V*特别地,若特别地,若 ,则规定,则规定FIRST(),即,即FIRST()是是能推导出的所有在开头位置的终结符或空符。能推导出的所有在开头位置的终结符或空符。4.2 LL(1)文法文法编译原理与技术编译原理与技术144.2 LL(1)文
12、法文法 由此我们可以看出,如果文法中不含空符产生式,并由此我们可以看出,如果文法中不含空符产生式,并且每个非终结符的所有候选式右部的首符集两两不相交,且每个非终结符的所有候选式右部的首符集两两不相交,则推导中就不会产生回溯。而提取左因子正是为了达到则推导中就不会产生回溯。而提取左因子正是为了达到这个目的,即反复提取左因子后,就能够把每个非终结这个目的,即反复提取左因子后,就能够把每个非终结符(包括新引进的非终结符)的所有候选首符集变成两符(包括新引进的非终结符)的所有候选首符集变成两两不相交。因此,提取左因子可以使得不含空符产生式两不相交。因此,提取左因子可以使得不含空符产生式的文法消除回溯。
13、的文法消除回溯。编译原理与技术编译原理与技术154.2 LL(1)文法文法u后继符集后继符集FOLLOW例例4.4:文法文法G3S:SAa|Bb Aa|cA|Bb|dB输入串w3=cca自顶向下的推导过程为:S Aa cAa ccAa cca G3与例4.3中文法G2惟一不同之处在于,G3中非终结符A的候选式中含有空符产生式。分析时,对于输入串w3的前两个符号cc,可以确定使用产生式AcA,而要得到第三个符号a,按照a所在的首符集我们应该选择产生式Aa,但是显然这种选择是错误的,因为这样得到的是符号串ccaa而不是cca。实际上,这时正确的选择是产生式A,也就是让A自动匹配到空符,就可以得到与
14、输入串匹配的符号串cca。编译原理与技术编译原理与技术164.2 LL(1)文法文法 这说明只要求文法每个非终结符的所有候选首符集两两不相交是不够的,还需要进一步讨论。观察上面例子可以看出,之所以会出现上述问题,是因为文法中含有空符产生式A,并且推导过程中A后面跟的终结符a恰好也是A的一个右部首符集中的符号。也就是说,a既能紧跟在A的后面出现,也能由A推出。这样,如果遇到当前非终结符是A而输入串中相应符号为a时,就不容易确定该用产生式A将A自动匹配空符得到紧跟其后的a,还是用产生式Aa推出a。文文法法G3S:SAa|Bb Aa|cA|Bb|dB编译原理与技术编译原理与技术17因此,一个文法能否
15、进行确定的自顶向下语法分析,不因此,一个文法能否进行确定的自顶向下语法分析,不仅仅与文法中具有相同左部的产生式右部的仅仅与文法中具有相同左部的产生式右部的FIRST集有集有关系,若有产生式右部可能推出关系,若有产生式右部可能推出,则还与其左部非终,则还与其左部非终结符的后继符号集合有关。结符的后继符号集合有关。定义定义4.2:设设G=(VN,VT,P,S)是上下文无关文法,对于是上下文无关文法,对于PVN,定义后继符集,定义后继符集FOLLOW(P)为为 FOLLOW(P)=a|S P 且且aFRIST(),VT*,V+即即 FOLLOW(P)=a|S Pa,aVT。特别地,若特别地,若S P
16、,则规定,则规定$FOLLOW(P)。即。即FOLLOW(P)是推导过程中所有可能紧跟在是推导过程中所有可能紧跟在P之后的终结之后的终结符或边界符号符或边界符号$($用来界定输入串,表示为:用来界定输入串,表示为:$输入串输入串$)。4.2 LL(1)文法文法编译原理与技术编译原理与技术18 可以看出,开始符号S后面不会跟任何符号,但是有S S,因此FOLLOW(S)=$。非终结符A后面可能不跟任何符号,即S A,也可能跟开始符号S,而S推导的符号串只能以a,d开头,即FIRST(S)=a,d,因此FOLLOW(A)=a,d,$。4.2 LL(1)文法文法 例例4.5:文法文法G4S:SaA|
17、d AbAS|输入串w4=abd的推导过程为:S aA abAS abS abd编译原理与技术编译原理与技术19u一般地,文法中含有形如一般地,文法中含有形如P|,PVN,,V*的产的产生式时,若生式时,若,不能同时推导出空符,不妨设不能同时推导出空符,不妨设 ,,则当则当 FIRST()(FIRST()FOLLOW(P)=时,对于非终结符时,对于非终结符P可以确定地选取产生式。可以确定地选取产生式。4.2 LL(1)文法文法 比如例4.4中,产生式Aa|cA|,FOLLOW(A)=a,$,FIRST()=FIRST(a|cA)=a,c,FIRST()=FIRST()=,FIRST()(FIR
18、ST()FOLLOW(A)=a,ca,$=a 。因此不能确定选取产生式。而例4.5中,产生式AbAS|,FOLLOW(A)=a,d,$,FIRST()=FIRST(bAS)=b,FIRST()=FIRST()=,FIRST()(FIRST()FOLLOW(A)=ba,d,$=。因此可以确定选取产生式。编译原理与技术编译原理与技术20u选择集选择集SELECT 定义定义4.3:给定不含左递归的上下文无关文法的产生式给定不含左递归的上下文无关文法的产生式P,PVN,V*,定义选择集,定义选择集SELECT(P)为为 若若 ,则,则SELECT(P)=FIRST()若若 ,则,则SELECT(P)=
19、(FIRST()-)FOLLOW(P)也就是说,当文法中含有形如也就是说,当文法中含有形如P|(PVN,,V*,不同时能推出不同时能推出)的产生式时,能够使用确定)的产生式时,能够使用确定的自顶向下分析必须使文法满足的自顶向下分析必须使文法满足 SELECT(P)SELECT(P)=4.2 LL(1)文法文法编译原理与技术编译原理与技术21 比如,例4.5中 SELECT(SaA)=FIRST(aA)=a,SELECT(Sd)=FIRST(d)=d SELECT(AbAS)=FIRST(bAS)=b,SELECT(A)=(FIRST()-)FOLLOW(A)=a,d,$SELECT(SaA)S
20、ELECT(Sd)=ad=SELECT(AbAS)SELECT(A)=ba,d,$=因此,文法G4可以进行确定的自顶向下语法分析。4.2 LL(1)文法文法例例4.5:文文法法G4S:SaA|d AbAS|编译原理与技术编译原理与技术22uLL(1)文法文法 定义定义4.4:文法文法G是是LL(1)文法,当且仅当每个非终结符文法,当且仅当每个非终结符P的任何两个候选式的任何两个候选式P|(,V*)满足:)满足:不存在终结符不存在终结符a,使得,使得和和推出的符号串都能以推出的符号串都能以a开开头。即头。即FIRST()FIRST()=若若 ,,则,则所能推出的符号串的开头符号不在所能推出的符号
21、串的开头符号不在FOLLOW(P)中。即中。即FIRST()FOLLOW(P)=4.2 LL(1)文法文法编译原理与技术编译原理与技术234.2 LL(1)文法文法 由由SELECT集可以得到集可以得到LL(1)文法的另一个等价定义:文法的另一个等价定义:定义定义4.5:一个上下文无关文法是一个上下文无关文法是LL(1)文法,当其仅当对文法,当其仅当对于每个非终结符于每个非终结符P的任何两个候选式的任何两个候选式P|满足满足SELECT(P)SELECT(P)=其中其中PVN,,V*,且,且,不同时推出不同时推出。例例4.6:下面文法是否是下面文法是否是LL(1)文法?文法?(1)G1S:Sa
22、A|d AbAS|(2)G2S:SaAS|b AbA|编译原理与技术编译原理与技术244.2 LL(1)文法文法 解:用定义4.4判断(1)对于S aA|d,FIRST(aA)FIRST(d)=ad=;对于A bAS|,FIRST(bAS)FIRST()=b=;FIRST(bAS)=b,FOLLOW(A)=a,d,$,FIRST(bAS)FOLLOW(A)=ba,d,$=;因此文法G1满足条件,,由定义4.4知该文法是LL(1)文法。(2)对于S aA|b,FIRST(aA)FIRST(b)=ab=,对于A bAS|,FIRST(bAS)FIRST()=b=,FIRST(bAS)=b,FOLL
23、OW(A)=a,b,$FIRST(bAS)FOLLOW(A)=ba,b,$=b。因此文法G2满足条件,但不满足条件,从而不是LL(1)文法。编译原理与技术编译原理与技术254.2 LL(1)文法文法 用定义4.5判断(1)SELECT(SaA)=FIRST(aA)=a SELECT(Sd)=FIRST(d)=d SELECT(AbAS)=FIRST(bAS)=b SELECT(A)=(FIRST()-)FOLLOW(A)=a,d,$所以 SELECT(SaA)SELECT(Sd)=ad=SELECT(AbAS)SELECT(A)=ba,d,$=由定义4.5知文法G1是LL(1)文法。(2)SE
24、LECT(SaAS)=FIRST(aAS)=a SELECT(Sb)=FIRST(b)=b SELECT(AbA)=FIRST(bA)=b SELECT(A)=(FIRST()-)FOLLOW(A)=a,b,$所以 SELECT(SaAS)SELECT(Sb)=ab=SELECT(AbA)SELECT(A)=ba,b,$由定义4.5知文法G2不是LL(1)文法。编译原理与技术编译原理与技术264.2 LL(1)文法文法uLL(1)文法的特点文法的特点l没有左因子没有左因子l不是二义的不是二义的l不含左递归不含左递归 一个文法中若含有左递归和左因子,则它一定不是一个文法中若含有左递归和左因子,则
25、它一定不是LL(1)LL(1)文法,也就不可能用确定的自顶向下分析法。然而,某些文法,也就不可能用确定的自顶向下分析法。然而,某些含有左递归和左因子的文法可以通过等价变换,消除左递含有左递归和左因子的文法可以通过等价变换,消除左递归和左因子后可能变为归和左因子后可能变为LL(1)LL(1)文法,不过仍需要用文法,不过仍需要用LL(1)LL(1)文文法的定义加以判别。也就是说,文法中不含左递归和左因法的定义加以判别。也就是说,文法中不含左递归和左因子只是子只是LL(1)LL(1)文法的必要条件。文法的必要条件。编译原理与技术编译原理与技术274.3 递归下降分析技术递归下降分析技术u基本思想基本
展开阅读全文