第5章 自顶向下语法.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文档。上传文档
查看更多
再引入新非终符S结果得等价文法为: (1)S→aS (2)S→dP|eq (3)S→App|Bqq (4)A→aAp|d (5)B→aBq|e 同样分别用(4)、(5)产生式的右部替换 (3)中右部的A、B再提取左公共因子最后结果得 (1)S→aS (2)S→dp|eq (3)S’→aS” (4)S’→dpp|eqq (5)S→APPP|Bqqq (6)A→aAp|d (7)B→aBq|e 可以看出若对(5)中产生式A、B上 继续用(6)、(7)产生式的右部替换,只 能使文法的产生式愈来愈多无限增加下 去,但不能得到提取左公共因子的预期 结果。 l)不一定每个文法的左公共因子都能在 有限的步骤内替换成无左公共因子的文法,上面 文法G4就是如此. 2)一个文法提取了左公共因子后,只解决了 相同左部产生式右部的FIRST集不相交问题, 当改写后的文法不含空产生式,且无左递归时, 则改写后文法是LL(1)文法,否则还需用LL(1)文 法的判别方式进行判断才能确定是否为LL(1)文 法。 左公共因子提取方法结论 什么是左递归? :一个文法含有下列形式的产生 式时。 a) A→Aβ A∈Vn,β∈V* b) A→Bβ c) B→Aα A,B∈ Vn ,α、β∈V* 2.消除左递归 G5: S→Sa S→b 所能产生的语言L={ban|n=0},对输入串 baaaa#是该语言的句子,但用自顶向下分析时可 看出当输入符为b时,为与b匹配则应选用S→b来推 导,但这样就推不出后边部分,而若用 S→Sa推导 则出现图 5.6的情况。 例5.10 3)扫描产生式右部的每一符号。 (a)若所扫描到的非终结符号在数组中对应的 标志是“是”,则删去该非终结符,若这使产生式 右部为空,则对产生式左部的非终结符在数组 中对应的标志改为“是”,并删除该非终结符为 左部的所有产生式。 (b)若所扫描到的非终结符号在数组中对应的 标志是“否” 则删去该产生式,若这使产生式左 部非终结符的有关产生式都被删去,则把在数 组中该非终结符对应的标志改成否。 非终结符 S A B C D 初值 未定 未定 未定 未定 未定 第一次扫描 ? 是 是 ? 否 第二次扫描 是 ? ? 否 ? 文法G[S]: S→AB, C→AD, 4)重复3),直到扫描完一遍文法 的产生式,数组中非终结符对应的特征再 没有改变为止。 ? 1). 根据定义计算 根据定义5.1 设 G=(Vt,Vn,S,P)是上 下文无关文法 FIRST(α)={a|α=*=aβ,a∈Vt ,α、 β∈V*} 若α=*=ε,则规定ε∈FIRST(α) 2.计算FIRST集 对每一文法符号X∈V计算FIRST(X) (a)若X∈Vt,则FIRST(X)={X} (b)若X∈Vn,且有产生式X→a..., a∈Vt 则a∈FIRST(X)。 (c)若X∈Vn,X→ε,则ε∈FIRST(X)。 求文法符号X∈V 的FIRST集的算法 (d)若X∈Vn,Y1,Y2,...Yi都∈Vn。而有产生式 X→Y1Y2...Yn, 当Y1,Y2,…Yi-1都=*=ε时(其中1=i=n). 则FIRST(Y1)-{ε}, FIRST(Y2)-{ε}, ... FIRST(Y i-1)-{ε}, FIRST(Yi) 都包含在FIRST(X)中. (e)当(d)中所有Yi=*=ε,(i=1,2,...,n) 则FIRST(x)=FIRST(Y1)∪FIRST(Y2)∪...∪ FIRST(Yn)∪{ε}. 反复使用上述(a)~(e)步直到每个符号的 FIRST集合不再增大为止。 由此算法可计算出例 5.5文法各非终结符的 FIRST集。 FIRST(S)={FIRST(A)-{ε}}∪{FIRST(B) -{ε}}∪{ε}∪{b}={a,b,ε} FIRST(A)={b}∪{ε}={b,ε} FIRST(B)={ε}∪{a}={a,ε} FIRST(C)={FIRST(A)-{ε}}∪FIRST(D)

文档评论(0)

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

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

1亿VIP精品文档

相关文档