第4章 自顶向下语法分析方法.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文档。上传文档
查看更多
消除左递归 直接左递归: A→Aβ A?VN, β ?V* 间接左递归: A→Bβ B→Aα A,B?VN, α,β ?V* 文法G5含有直接左递归: S→Sa S→b 所能产生的语言L={ban|n≥0} 输入串baaaa#是该语言的句子,但如何用自顶向下分析呢? 文法G6含有间接左递归: A→aB A→Bb B→Ac B→d 输入串adbcbcbc# A→aB→ad A→aB→aAc→aBbc→aAcbc… 消除直接左递归 把直接左递归改写为右递归。如G5: S→Sa S→b (L={ban|n≥0}) 改为: S→bS S→aS|ε 消除直接左递归的一般方法: A→Aα1| Aα2|…| Aαm|β1|β2|…|βn 其中: αi 不等于ε , βj不以A开头。 改为: A→ β1A| β2A |…| βnA A→ α1A | α2A |…| αmA |ε 消除间接左递归 将间接左递归变为直接左递归,然后消除直接左递归。如文法G6含有间接左递归: A→aB A→Bb B→Ac B→d B→aBc B→Bbc B→d B→aBcB | dB B→bcB| ε 消除文法中一切左递归的算法 1.无回路(A(A (A) 2.无空产生式 (1) 以某种顺序将文法非终结符排列A1 ,A2 …An (2) for i:=1 to n do begin for j:=1 to i-1 do 用Ai--?1| ?2r…| ? k r替代 形如Ai-- Ajr的规则,其中 Aj-- ?1| ?2…| ?k是关于Aj的全部产生式; 消除Ai规则的直接左递归; end; (3)化简由2得到的文法 + ? 例: 文法G: S→Qc|c Q→Rb|b R→Sa|a R→ Qca|ca|a R→ Rbca|bca|ca|a R→ (bca|ca|a)R R → bcaR|ε 参考P.84 不确定的自顶向下分析思想 1.由于相同左部的产生式的右部FIRST集交集不为空引起回溯。 S→xAy A→ab|a w=xay S x A y S x A y a b S x A y a 试探 回溯 试探 2.由于相同左部非终结符的右部能 ε 且该非终结符FOLLOW集中含有其右部FIRST集的元素。 设文法G[S] 为: S→aAS S→b A→bAS A→ε * ? w=ab# S a A S S a A S b A S S a A S ε b 试探 再试探 回溯 3.由于文法含有左递归而引起回溯。 设文法G[S] 为: S→Sa S→b w=baa# S b S S a S S a b S S a S a S S a S a b 确定的自顶向下分析方法 1.递归子程序法 实现思想:对文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选时能够按LL(1)形式可唯一地确定选择某个候选进行推导。 限制:对文法要求高,必须满足LL(1)文法;由于递归调用多,速度慢,占用空间多。 2.预测分析法 预测分析器: 预测分析程序(P.88) 先进后出栈 预测分析表 预测分析表的构造 表达式文法: E →E+T | T T →T*F | F F → i | ( E ) 构造过程 1.判断文法是否为LL(1)文法 消除左递归: E →E+T | T T →T*F | F F → i | ( E ) E →TE E → +TE | ε T →FT T → *FT | ε F → i | ( E ) 可推出 ε 的非终结符表: E →TE E → +TE | ε T →FT T → *FT | ε F → i | ( E ) E E T T F 否 是 否 是 否 各非终结符的FIRST集和FOLLOW集: FIRST(E)={ ( , i } FIRST(E)={ + , ε } FIRST(T)={ ( , i } FIRST(T)={ * , ε } FIRST(F)={ ( , i } FOLLOW(E)={ ) , # } FOLLOW(E)={ ) , # } FOLLOW(T)={ + , ) , # } FOLLOW(T)={ + , ) , # } FOLLOW(F)={ * , + , ) , # } E →TE E → +TE | ε T →FT T → *FT | ε F → i | ( E ) 查看FOLLOW定义 查看FIRST定义 各产生式的SELECT集: E →TE E → +TE | ε T →FT T → *FT | ε F → i | ( E ) SELECT(E →TE) ={ ( , i } SELECT(E → +

文档评论(0)

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

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

1亿VIP精品文档

相关文档