如何判断一个文法是LL(1)文法_第1页
如何判断一个文法是LL(1)文法_第2页
如何判断一个文法是LL(1)文法_第3页
如何判断一个文法是LL(1)文法_第4页
如何判断一个文法是LL(1)文法_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、LL的含义自左向右扫描分析输入符号串从识别符号开始生成句子的最左推导LL(1):向前看一个输入符号,便能唯一确定当前应选择的规则LL(k):向前看k个输入符号,才能唯一确定当前应选择的规则4.2.3 LL(1)文法的判别 要构造确定的自顶向下分析程序要求描述文法必须是LL(1)文法 1同一非终结符有多个候选式时 引起回溯的原因 【例4.1】 =acbGS: SaAbAcd|c(1)候选式的终结首符号相同(2)候选式的终结首符号相同【例4.8】 SAaAa| 21. FIRST集 FIRST():从可能推导出的所有开头终结符号或对于文法G的所有非终结符的每个候选式,其终结首符号集称为FIRST集

2、,定义如下:,则规定FIRST()若【例】 SaAbAcd|ca ,aVTFIRST()=a|FIRST(aAb) =aFIRST(cd) =cFIRST(c) =c【例】 SAaAa| FIRST(a) =aFIRST() = FIRST(Aa) =aFIRST(S) =aFIRST(A) =cFIRST(S) =aFIRST(A) =a, 3(1)若=a,且aVT ,则aFIRST(); 例: FIRST(i)=i FIRST(+TE)=+ETEE+TE|TFTT*FT|F(E)|i构造FIRST集的算法(2)若=X,XVN,且有产生式Xb,则把b加入到FIRST()中; 例: FIRST

3、(FT)=(,i ?4 将FIRST(X1)中的一切非的终结符加进FIRST(); 若FIRST(X1),则将FIRST(X2)中的一切非的终结符加进FIRST(); 若FIRST(X1)且FIRST(X2),则将FIRST(X3)中的一切非的终结符加进FIRST(); 依此类推,若对于一切1in,FIRST(Xi),则将加进FIRST()。(3)若=X1X2 Xn,其中XiVN , 1in;ETEE+TE|TFTT*FT|F(E)|i例:FIRST(FT)= 注意:要顺序往下做,一旦不满足条件,过程就要中断进行FIRST(F)-=(,i5FIRST(F)=(,iFIRST(T)=*,FIRS

4、T(T)=FIRST(F)-=(,iFIRST(E)=+,FIRST(E)= FIRST(T)-=(,iFIRST(TE)=FIRST(T)-=(,iFIRST(+TE)=+ FIRST()=FIRST(FT)= FIRST(F)-=(,iFIRST(*FT) =*FIRST((E))=(FIRST(i)=i【例4.9】 GEETEE+TE|TFTT*FT|F(E)|i62. FOLLOW集 FOLLOW(A):是所有句型中紧接A之后的终结符号或#对于文法G的非终结符的后继符号集称为FOLLOW集,定义如下: A,则规定#FOLLOW(A)若SAa,a VTFOLLOW(A) =a|S ETE

5、E+TE|TFTT*FT|F(E)|iT+TE ,则+FOLLOW(T)E7构造集合FOLLOW的算法(1)若为开始符号,则把“#”加入FOLLOW(A)中;(2)若BA (),则把FIRST()-加入FOLLOW(A)中; 注:FOLLOW集合中不能有(3)若BA 或BA,且则把FOLLOW(B)加入FOLLOW(A) 中。 ,ETEE+TE|TFTT*FT|F(E)|i#FOLLOW(E)由F(E)可知, )FOLLOW(E)由ETE,应把FOLLOW(E)加入FOLLOW(E)由E + TE 且E ,应把FOLLOW(E )加入FOLLOW(T)8【例4.10】 GEETEE+TE|TF

6、TT*FT|F(E)|i求FOLLOWFOLLOW(E)=#,) E是开始符号#FOLLOW(E) 又F (E) )FOLLOW(E)FOLLOW(E)=#,) E TE FOLLOW(E)加入 FOLLOW(E)FOLLOW(T)=+,),# E +TE FIRST(E)-加入FOLLOW(T) 又E, FOLLOW(E)加入FOLLOW(T)FOLLOW(T)= FOLLOW(T)= +,),# T FT FOLLOW(T)加入FOLLOW(T)FOLLOW(F)=*,+,),# T FT FOLLOW(F)=FIRST(T)- 又T FOLLOW(T)加入FOLLOW(F)FIRST(F)=(,iFIRST(T)=*,FIRST(T) =(,iFIRST(E)=+,FIRST(E)=(,i9若一个文法满足以下条件,则称该文法G为LL(1)文法:(1)文法不含左递归;(2)对于每个非终结符A的各个候选式的终结首符号集两两不相交。即,如果A1|2|n,则FIRST(i)FIRST(j)= ,其中1i,jn,且ij。(3)对于文法中每个非终结符A,若它某个候选式的终结首符号集包含,则FIRST(A)FOLLOW(A)3LL(1)文法的判别条件10【例4

温馨提示

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

评论

0/150

提交评论