第四章语法分析和语法分析程序-UIC.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章语法分析和语法分析程序-UIC.ppt

LL分析法 LL分析法的分析器由一张预测分析表(LL(1)分析表),一个控制程序(表驱动程序)及一分析栈组成 -、构造FIRST集的算法 对于G中的每个文法符号X,为求FIRST(X),反复应用如下规则,直到集合不再增大: (1) if (X?VT) { FIRST(X)={X};} (2)if (X?VN) { if(X?a??P ? a?VT) a?FIRST(X); if (X???P) {??FIRST(X);} } (3) if (X?Y1Y2…Yk?P) {if (Y1?VN) {FIRST(Y1)-{?} ?FIRST(X);} for(1? j? k-1)if (Yj?VN???FIRST(Yj)){FIRST(Yj)-{?}?FIRST(X);} if (for(1? j? k): ?? FIRST(Yj)) {??FIRST(X);} ???V*,?=X1X2…Xn,求FIRST(?)类似于求X?Y1Y2…Yk,略. 构造FOLLOW集的算法 FOLLOW: VN?VT?{#},反复使用如下规则,直到不再增大: 1. # ?FOLLOW(S); 2. if (A??B??P) {FIRST(?)-{?}?FOLLOW(B);} 3. if ( (A??B?P) ? ( A??B? ? ??FIRST(?) ) ) {FOLLOW(A)?FOLLOW(B);} 算法的证明: 对于1.,由定义直接得到; 对于2.,由于A是有用符号,则必存在含A的句型: S ?* ?A? ? ??B?? ? ??Ba?? (a ?FIRST(?)); 对于3., 类似地, S ?* ?A? ? ??B[?]?,显然, FIRST(?)?FOLLOW(A),并且, FIRST(?)?FOLLOW(B).证毕// 构造FIRST集和FOLLOW集的例子 我们以 (文法1)为例,计算相应的FIRST集和FOLLOW集. 1.求所有VN符的FIRST集.利用规则(2),有 FIRST(M)={*,/}, FIRST(A)={+,-} FIRST(F)={(,i}; 再利用规则(3),有FIRST(T’)=FIRST(M)?{?}={*,/, ?}, FIRST(T)=FIRST(F)={(,i}, FIRST(E’)=FIRST(A) ?{?}={+,-,?} FIRST(E)=FIRST(T)={(,i} 2.求FOLLOW集 (1)由规则(1),#?FOLLOW(E),再由产生式F?(E), ) ?FOLLOW(E), 从而,FOLLOW(E)={),#} (2)由规则(3)及产生式E?TE’可知FOLLOW(E)?FOLLOW(E’),即有 FOLLOW(E’)={),#} 求FIRST,FOLLOW集例子(续) (3)由规则(2)及产生式E’?ATE’有 FIRST(E’)-{?}?FOLLOW(T);再由规则(3)及E?TE’和E’?*?有 FOLLOW(E)?FOLLOW(T) 即FOLLOW(T)={+,-}?{),#}={+,-,),#} (4)由规则(3)有T?FT’有FOLLOW(T)?FOLLOW(T’),即FOLLOW(T’)={+,-,),#} (5)由规则(2)及T’?MFT’,有 FIRST(T’)-{?} ?FOLLOW(F),再由规则(3)及T’?MFT’和T’?*?,有FOLLOW(T’) ?FOLLOW(F),从而, FOLLOW(F)={*, /}?{+,-,),#}={+,-,*,/,),#} (6)由规则(2)及E’?ATE’,T’ ?MFT’ ,有 FIRST(T)?FOLLOW(A), FIRST(F) ?FOLLOW(M),故有 FOLLOW(A)={(,i}, FOLLOW(M)={(,i}. FIRST集和FOLLOW集 二、LL分析表的构造 对已给的LL(1)文法,在得到各文法符号的FIRST集和FOLLOW集之后,就可容易地构造出LL(1)分析表 (也称预测分析表). 在实际的表存储结构中,矩阵中每个元素并非真正存储的是产生式,而是其右部的逆序(也可以是产生式序号),这样便于分析时使用,并节省了内存空间. 造表的算法 在A?VN所在行,a?VT所在列, M[A,a]的填写方法如下: (1) if ( ?A???P and a?FIRST(?) )M[A,a] =‘A??’; (2) if ( ??*? (? ?FIRST(?)) and a?FOLLOW(A) ) M[A,a]=‘A??’; (3) Otherwise, M[A,a]=‘ERR’. LL(1)分析表 三、分析器的工作

文档评论(0)

wendang_12 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档