自顶向下分析

自顶向下分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 因为不确定需要使用哪个产生式,所以会有出错的时候,出错了就要回溯(退回到原来的步骤),导致效率降低,所以有了预测分析。

在这里插入图片描述

文法转换

  • 因为并不是所有的文法都适合自顶向下的分析方法。 在分析过程中会出现问题(回溯,无限循环),这个时候就要改造文法。
  • 左递归会导致无限循环,消除直接左递归—转换为右递归。消除间接左递归—替换。
  • 方法:提取左公因子

在这里插入图片描述

LL(1)文法—可使用预测分析表

  • 空产生式什么时候使用?

在这里插入图片描述

  • s文法

在这里插入图片描述

  • q文法比s文法更强大,但他对产生式的右部限制还是很严格。所以出现了LL(1)文法。

在这里插入图片描述

  • LL(1)文法允许产生式的右部以非终结符打头,这就增加了计算可选集的复杂性。由此引入串首终结符的概念

在这里插入图片描述

在这里插入图片描述

FIRST和FOLLOW集计算得到SELECT集

  • FIRST集计算: 把终结符填入,同时也可以传导,比如产生式③包含F,那么也可以把产生式⑤的FLLOW集给到③。

在这里插入图片描述
在这里插入图片描述

  • FOLLOW集计算:

在这里插入图片描述

在这里插入图片描述

  • 计算出FIRST集和FOLLOW集之后,就可以计算SELECT集了
  • 如果产生式开头是终结符,就在SELECT中填入这个终结符,如果是空集的话,就填入他对应的FOLLOW集,如果是非终结符的话没就填入这个非终结符对应的FIRST集。

在这里插入图片描述

  • 根据SELECT集,构造出预测分析表。
    在这里插入图片描述

递归的预测分析法

在这里插入图片描述

  • 这是第三个产生式的程序伪代码

在这里插入图片描述

非递归的预测分析法

  • 下推自动机跟有穷自动机相似,但是识别能力更强,有穷自动机识别能力不强是因为,他的记忆能力不强,因为他是有穷的,也没有存储器,给有穷自动机增加一个下推存储器(栈),就构成了下推自动机

在这里插入图片描述

  • 表驱动的预测分析法

在这里插入图片描述
在这里插入图片描述

两种方法对比以及预测分析法步骤总结

在这里插入图片描述
在这里插入图片描述

预测分析法中的错误处理

在这里插入图片描述
在这里插入图片描述

  • 例:

在这里插入图片描述

发布了116 篇原创文章 · 获赞 59 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44861399/article/details/104903219