自顶向下语法分析方法.ppt_第1页
自顶向下语法分析方法.ppt_第2页
自顶向下语法分析方法.ppt_第3页
自顶向下语法分析方法.ppt_第4页
自顶向下语法分析方法.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

自顶向下语法分析方法,第4章,4.1 确定的自顶向下分析思想,确定的自顶向下分析方法,首先要解决从文法的开始符号出发,如何根据当前的输入符号(单词符号)唯一地确定选用哪个产生式替换相应非终结符往下推导,或构造一棵相应的语法树。,例4.1 设文法G1S: S pA | qB A cAd | a B dB | b 考虑对输入串w=pccadd的分析。,这个文法有以下两个特点: 每个产生式的右部都由终结符号开始。 如果两个产生式有相同的左部,那么它们的右部由不同的终结符开始。,例4.2 设文法G2S: S Ap S Bq A a A cA B b B db 考虑对输入串w= ccap的分析。,这个文法有以下两个特点: 产生式的右部不全是由终结符开始 如果两个产生式有相同的左部,它们的右部是由不同的终结符或非终结符开始。 文法中无空产生式,定义4.1 设G=(VT,VN,P,S)是上下文无关文法 FIRST()=a| a,aVT, ,V* 若 ,则规定FRIST()。 如: FIRST(Ap) = a, c FIRST(Bq) = b, d,例4.3 设文法GS: SaA Sd AbAS A 考虑对输入串w= abd的分析。,结论 当某一非终结符的产生式中含有空产生式时,它的非空产生式右部的首符号集两两不相交,并与在推导过程中紧跟该非终结符右边可能出现的终结符集也不相交则仍可构造确定的自顶向下分析。,定义4.2 设G=(VT,VN,P,S)是上下文无关文法, 对AVN定义 FOLLOW(A)=aS A 且aVT ,aFRIST(),V*,V+ 若S uA,且 ,则规定#FOLLOW(A) 如: FOLLOW(A)=FIRST(S) #=a,d,#,定义4.3 给定上下文无关文法的产生式A, AVN, V*, 若 ,则SELECT(A ) = FIRST() 若如果 ,则SELECT(A ) = (FIRST()-)FOLLOW(A),定义4.4 一个上下文无关文法是LL(1)文法的充分必要条件是,对每个非终结符A的两个不同产生式,A, A,满足 SELECT(A) SELECT(A ) = 其中、不能同时 。,LL(1)文法的含义 第1个“L”指的是由左向右地处理输入。 第2个“L”指的是它为输入串描绘出一个最左推导。 括号中的数字1意味着它只需向右看1个符号便可决定如何推导即选择哪个产生式(规则)进行推导。,4.2 LL(1)文法的判别,求出能推出的非终结符 计算FIRST集 计算FOLLOW集 计算SELECT集 判别是否是LL(1)文法,例:设文法GS 为: SAB SbC A Ab B BaD CAD Cb DaS Dc 判断它是否是LL(1)文法。,1.求出能推出的非终结符,SAB SbC A Ab B BaD CAD Cb DaS Dc,2.计算FIRST集,根据定义计算 1.若XV,则FIRST(X)=X 2.若XVN,且有产生式Xa, a V,则aFIRST(X);若X也是一条产生式,则FIRST(X). 3.若XY是一个产生式且YVN,则把FIRST(Y)中的所有非元素都加到FIRST(X)中;若X Y1Y2YK 是一个产生式,Y1,Y2,Yi-1都是非终结符,而且对于任何j,1j i-1,FIRST(Yj)都含有(即 Y1Yi-1 ),则把FIRST(Yj)中的所有非元素都加到FIRST(X)中;特别是,若所有的FIRST(Yj , j=1,2,K)均含有,则把加到FRIST(X)中.,用关系图法求文法符号的FIRST集(自学),3.计算FOLLOW集,根据定义计算 1.对于文法的开始符号S,置#于FOLLOW(S) 中; 2.若B是一个产生式,则把 FIRST()-加至FOLLOW(B)中; 3.若B是一个产生式,或B是一个产 生式而 ,则把FOLLOW(A)加至FOLLOW(B)中,用关系图法求非终结符的FOLLOW集(自学),4.计算SELECT集,SELECT(SAB)=a,b,# SELECT(SbC)=b SELECT(A)=a,c,# SELECT(Ab)=b SELECT(B)=#,SELECT(BaD)=a SELECT(CAD)=a,b,c SELECT(Cb)=b SELECT(DaS)=a SELECT(Dc)=c,5. 判别是否是LL(1)文法,所以文法GS 不是LL(1)文法。,4.3 某些非LL(1)文法到LL(1)文法的等价变换,提取左公共因子 消除左递归,1. 提取左公共因子,例4.6 文法G1S : SaSb SaS S,化为: SaS(b|) S,进一步化为: SaSA Ab A S,结果仍然不是LL(1)文法。因此,文法中不含左公共因子只是LL(1)文法的必要条件。,A1|2|n 变换为 A(1|2|n) ,即 AA A 1|2|n,例4.7 文法G2A: Aad ABc BaA BbB,1.化为: Aad AaAc AbBc BaA BbB,2.化为: Aa(d|Ac) AbBc BaA BbB,3.化为: AaA AbBc Ad AAc BaA BbB,例4.8 文法G3S : SaSd SAc AaS Ab,1.化为: SaSd SaSc Sbc AaS Ab,2.化为: SaS(d|c) Sbc AaS Ab,3.化为: SaSA Sbc Ad Ac AaS Ab,结果中A是不可达到的符号。,例4.9 文法G4S : SAp|Bq AaAp|d BaBq|e,1.化为: SaApp|aBqq|dp|eq AaAp|d BaBq|e,2.化为: Sa(App|Bqq) Sdp|eq AaAp|d BaBq|e,3.化为: SaS Sdq|eq SApp|Bqq AaAp|d BaBq|e,4.化为: SaS Sdp|eq S aAppp|aBqqq|dpp|eqq AaAp|d BaBq|e,结论 不一定每个文法的左公共因子都能在有限的步骤内替换成无左公共因子的文法。 一个文法提取了左公共因子后,只解决了相同左部产生式右部的FIRST集不相交问题,当改写后的文法不含空产生式,且无左递归时,则改写后的文法是LL(1)文法,否则还需用LL(1)文法的判别方式进行判断才能确定是否为LL(1)文法。,2. 消除左递归,直接左递归 AA AVN, V* 间接左递归 AB BA A,BVN, , V*,例4.10 G5S: SSa Sb 考虑对输入串baaaa#的分析 例4.11 G6A: AaB ABb BAc Bd 考虑对输入串adbcbcbc#的分析,SbS SaS|,BaBc BBbc Bd,BaBcB | dB BbcB| ,消除直接左递归,AA1| A2| Am|1|2|n 其中: i 不等于 , j不以A开头。 改为: A 1A| 2A | nA A 1A | 2A | mA |,消除间接左递归,将间接左递归变为直接左递归,然后消除直接左递归。,消除文法中一切左递归的算法,1. 以某种顺序将文法非终结符排列A1 ,A2 An 2. for i:=1 to n do begin for j:=1 to i-1 do 用Aj1| 2 | k关于Aj的全部产生式替代 形如Ai Ajr的产生式为: Ai 1r| 2r|kr; end; 消除Ai的直接左递归; 3.化简由2得到的文法,例,文法GS: SQc|c QRb|b RSa|a,R Qca|ca|a,R Rbca|bca|ca|a,R (bca|ca|a)R,R bcaR|,将非终结符排序为S、Q、R,4.5 LL(1)分析的实现,递归下降LL(1)分析程序 表驱动LL(1)分析程序,4.5.2表驱动LL(1)分析程序,一个预测分析器是由三个部分组成 预测分析程序 符号栈 预测分析表,预测分析表,预测分析表可用一个矩阵M表示。矩阵的元素MA, a中的内容为一条关于A的产生式,表明当用非终结符A向下推导且面临输入符a时,所应采取的候选产生式,当元素内容无产生式时,则出错。 一个文法的预测分析表不含有多重入口,当且仅当该文法是LL(1)的。 预测分析表的构造算法 若aSELECT(A),则把A放入MA, a中。 把所有无定义的MA,a标上出错标记。,例 文法GE: E TE E +TE| T FT T *FT| F i | ( E ) 构造过程: 1.判断文法是否为LL(1)文法 2.构造预测分析表,预测分析程序算法,分析栈 #E #ET #ETF #ETi #ET #E #ET+ #ET #ETF #ETi #ET #ETF* #ETF #ETi #ET #E #,剩余串 i+i*i# i+i*i# i+i*i# i+i*i# +i*i# +i*i# +i*i# i*i# i*i# i*i# *i# *i# i# i# # # #,产生式 ETE TFT F i i 匹配 T E +TE + 匹配 T FT F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论