自顶向下分析

自顶向下分析

自顶向下分析
自顶向下分析
自顶向下分析
自顶向下分析
自顶向下分析

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

自顶向下分析

文法转换

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

自顶向下分析

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

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

自顶向下分析

  • s文法

自顶向下分析

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

自顶向下分析

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

自顶向下分析

自顶向下分析

FIRST和FOLLOW集计算得到SELECT集

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

自顶向下分析
自顶向下分析

  • FOLLOW集计算:

自顶向下分析

自顶向下分析

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

自顶向下分析

  • 根据SELECT集,构造出预测分析表。
    自顶向下分析

递归的预测分析法

自顶向下分析

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

自顶向下分析

非递归的预测分析法

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

自顶向下分析

  • 表驱动的预测分析法

自顶向下分析
自顶向下分析

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

自顶向下分析
自顶向下分析

预测分析法中的错误处理

自顶向下分析
自顶向下分析

  • 例:

自顶向下分析