非递归的预测分析法

时间:2024-05-20 13:26:28

概念

非递归的预测分析不需要为每个非终结符编写递归下降过程,而是根据预测分析表构造一个自动机,也叫表驱动的预测分析。

非递归的预测分析法

通过增加一个栈,来增强自动机的识别能力

例如,$L=\{a^nb^n|n\ge 1\}$

这个产生式识别一切以先是a后是b 的句子,而且ab的个数一致。若是用有穷状态机则无法实现。若是增加了一个栈,则可以在每接收到一个a之后将a进栈,然后每当接收到一个b之后将a出栈,若是在接收到最后一个b时,最后一个a出栈,那么就识别成功。

例子

非递归的预测分析法

算法流程

非递归的预测分析法

预测分析法实现步骤

  1. 构造文法
  2. 改造文法:消除二义性、消除左递归、消除回溯
  3. 求每个变量的FIRST集和FOLLOW集,从而求得每个候选式的SELECT集
  4. 检查是不是LL(1)文法。若是,构造预测分析表。
  5. 对于递归的预测分析,根据预测分析表为每一个非终结符编写一个过程;对于非递归的预测分析,实现表驱动的预测分析算法。