《编译原理消除回溯》PPT课件.ppt_第1页
《编译原理消除回溯》PPT课件.ppt_第2页
《编译原理消除回溯》PPT课件.ppt_第3页
《编译原理消除回溯》PPT课件.ppt_第4页
《编译原理消除回溯》PPT课件.ppt_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

编译原理,主讲教师:于永彦,计算机科学与技术专业最重要的学科基础课程,淮阴工学院,电话:信箱: shanshan_,2/20,FIRST集合,引入FIRST集概念是为了在当前输入的条件下,观察哪个产生式的右部能够导出输入符号,进而决定采用哪个产生式来进行推导。 显然,我们关心的是产生式右部符号串的FIRST集,即文法符号串的FIRST。这个符号串可以是任意的终结符和非终结符的组合。,3/20,FIRST集合,【定义】 假定是文法G的任一符号串,即(VNVT)*,则的首符号集定义为: 可见,所谓符号串的FIRST,就是指的所有可能推导的开头终结符或的集合。 由定义,不难得出下面的结论: 若 ,则 ; 若=aA,其中A代表非终结符,则 ; 若=Aa,则 ; 若 ,则 。,4/20,FIRST集合,一、关系图法求解FIRST 【例】已知文法GS如下: SAB|bC Ab| BaD| CAD|b DaS|c 求所有非终结符的FIRST。 【解】关系图法求解FIRST集,分为三步进行。 (1)求出能推出的非终结符 首先建立一个以文法非终结符为元素的一维数组X,对应每个非终结符设置一个标志位,以记录能否推出。其值有三种情况:“未定”、“是”、“否”。 其次,按下述步骤逐步更新标志位:,5/20,FIRST集合, 依次扫描文法每一条产生式 I删除所有右部含终结符的产生式。若使得以某非终结符为左部的所有产生式都被删除,则置该非终结符的标记为“否”,例“D”。 II若某非终结符存在一条右部为的产生式,则置该非终结符的标志为“是”,并删除该非终结符的所有产生式,如“A”、“B”。见表的第2行。 扫描产生式右部的每一符号 I若某非终结符标志为“是”,则删去该非终结符,若进而使得某产生式右部为空,则置该式左部的非终结符标志为“是”,并删除该非终结符为左部的所有产生式,如“S”。 II若某非终结符标志为“否”,则删去该产生式,若使得左部为该非终结符的产生式都被删去,则置该非终结符标志为“否”,例如“C”。 重复上述步骤,直到扫描完一遍文法的产生式,非终结符标志位不再改变为止。,6/20,FIRST集合,结合本例,由中(I)、(II)得知例中对应非终结符D的标志改为“否”,对应非终结符A、B的标志改为“是”。经过中(I)、(II)两步后文法中的产生式只剩下:SAB和CAD,也就是只剩下右部全是非终结符串的产生式。再由中的(I)步扫描到产生式SAB时,在数组中A、B对应的标志都为“是”,删去后S的右部变为空,所以S对应标志置为“是”。最后由中的(II)扫描到产生式CAD时,其中A对应的标志为“是”,D对应的标志是“否”,删去该产生式后,再无左部为C的产生式,所以C的对应标志改为“否”。结果如下表。,7/20,FIRST集合,(2)绘制文法关系图 按下述步骤绘制文法关系图。 每个文法符号对应图中一个结点,对应终结符的结点时用符号本身标记,对应非终结符A的结点用其FIRST(A)标记。 若有产生式AX,且 ,则从对应A的结点到对应X的结点连一条箭弧。,8/20,FIRST集合,(3)求解FIRST 按下述步骤从关系图求解FIRST。 凡是从FIRST(A)结点有路径可到达的终结符点所标记的终结符为FIRST(A)的成员。 若某非终结符能够 ,则将加入该非终结符的FIRST集中。 至此,可以求得本例的结果: FIRST(S)=b,a, FIRST(A)=b, FIRST(B)=a, FIRST(C)=a,b,c FIRST(D)=a,c,9/20,FIRST集合,二、根据通用算法构造FIRST (1)文法符号的FIRST 对于文法中的每一个符号X(VNVT),构造FIRST(X)时,只要连续使用下列步骤,直至FIRST集不再扩大为止。 步骤1若XVT,则FIRST(X)X; 步骤2若XVN,则考查以X为左部的每一条产生式: 若X是一条产生式,则FIRST(X); 若XY1Y2Yn是产生式: (I) 若Y1, , Yi-1都VN且都能 (其中1in),则FIRST(Y1)-,FIRST(Y2)-,FIRST(Yi-1)-和FIRST(Yi)都包含在FIRST(X)中; (II) 若所有的FIRST(Yi)均能 ,i1, 2, , k,则把加到FIRST(X)中。,10/20,FIRST集合,11/20,FIRST集合,【例】已知文法GS如下: SaAd ABC Bb | Cc | 求各个非终结符的FIRST集。 【解】由上述算法,容易求各个FIRST集: FIRST(S)=a FIRST(B)=b, FIRST(C)=c, FIRST(A)=b,c,12/20,FIRST集合,(2)文法符号串的FIRST 对文法G的任一符号串,可按下图所示的步骤构造FIRST ()。,再看上例GS,求产生式右部的符号串的FIRST集。 【解】由上图,容易求各个FIRST集: FIRST(aAd)=a FIRST(BC)=b,c, FIRST(b)=b FIRST(c)=c,13/20,FIRST集合,注意:在使用通用算法法求解FIRST的时候,如果求解过程中存在递归循环现象,将使求解过程陷入无限循环中。 【例】若文法GS为: SBCc | gDB B| bCDE CDSB | cS D| dD EgSf | c 容易看出: FIRST(S) =(FIRST(B)-)FIRST(C)g =(FIRST(B)-)(FIRST(D)-)FIRST(S)cg 很明显,存在循环求解过程,求FIRST(S)时,需要先求FIRST(C),而若求解FIRST(C)又需要先求FIRST(S)。所以,此文法不适宜应用通用算法。,14/20,FIRST集合,【结论】 对于所有形如A12n的产生式,若存在 FIRST(i)FIRST(j) (ij) 则能够根据不同输入符号唯一确定候选式i,即不存在回溯。此时,当要求使用A去匹配输入串时,能够根据输入符号a准确指派某一个候选式前去执行任务,这个候选式就是FIRST中含a的那个i。,15/20,实例分析,【例】已知文法GS定义如下: SAp|Bq Aa|cA Bb|dB 考查输入串w=ccap是否合法。 【解】所谓考查输入串ccap是否合法,就是看能否由文法开始符号导出符号串。 首先,可由上面介绍的方法求得文法的各个符号(串的)FIRST。 文法符号的FIRST: FIRST(S)=a,c,b,d FIRST(A)=a,c FIRST(B)=b,d FIRST(p)=p FIRST(q)=q FIRST(a)=a FIRST(c)=c FIRST(b)=b FIRST(d)=d,16/20,FIRST集合,文法符号串的FIRST: FIRST(Ap)=a,c FIRST(Bq)=b,d FIRST(a)=a FIRST(cA)=c FIRST(b)=b FIRST(dB)=d 显然,各个候选式的FIRST互不相交,符合要求: FIRST(Ap)FIRST(Bq) = a,cb,d = FIRST(a) FIRST(cA) = ac = FIRST(b) FIRST(dB) = bd = 因此,可以很容易得到符号串w=ccap的推导过程: S Ap cAp ccAp ccap,不存在回溯现象!,17/20,提取左公共因子,不过,有时候一个文法并不一定能满足“候选式的首符号集并非两两不相交。” 譬如下面的例子。 【例】已知文法GA定义如下: Aad ABc BaA BbB ,18/20,提取左公共因子,【解】利用上述算法,不难求得各个符号串的FIRST: FIRST(ad)=a FIRST(Bc)=a,b FIRST(aA)=a FIRST(bB)=b 不难看出,存在候选式的FIRST相交的情况: FIRST(ad)FIRST(Bc) = aa,b =a 所以,本文法存在回溯现象,不适于应用确定的自顶向下分析法。那么,有没有什么办法能够对文法进行一定的预处理,从而达到所有候选式的FIRST集两两不相交呢?答案是肯定的,通过提取左公共因子即能实现此目的!,19/20,提取左公共因子,所谓左公共因子,是指形如AB和AC的产生式。 假定关于A的规则是: A1| 2 | n 那么,可以把上述规则改写为下面的

温馨提示

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

评论

0/150

提交评论