概念
非递归的预测分析不需要为每个非终结符编写递归下降过程,而是根据预测分析表构造一个自动机,也叫表驱动的预测分析。
通过增加一个栈,来增强自动机的识别能力。
例如,$L=\{a^nb^n|n\ge 1\}$
。
这个产生式识别一切以先是a
后是b
的句子,而且a
与b
的个数一致。若是用有穷状态机则无法实现。若是增加了一个栈,则可以在每接收到一个a
之后将a
进栈,然后每当接收到一个b
之后将a
出栈,若是在接收到最后一个b
时,最后一个a
出栈,那么就识别成功。
例子
算法流程
预测分析法实现步骤
- 构造文法
- 改造文法:消除二义性、消除左递归、消除回溯
- 求每个变量的FIRST集和FOLLOW集,从而求得每个候选式的SELECT集
- 检查是不是
LL(1)
文法。若是,构造预测分析表。 - 对于递归的预测分析,根据预测分析表为每一个非终结符编写一个过程;对于非递归的预测分析,实现表驱动的预测分析算法。