如果是非递归预测分析方法,则预测分析器由输入带、读头和带有预测分析表的控制器组成。 从下面的自动机的结构来看,其实和有限自动机的结构类似。 是的,有限自动机是指状态遇到输入符号然后改变状态。 与有限自动机不同的是,增加了一个栈,也称为下推存储器,起到存储器的作用。 因此,这种自动机也称为下推自动机。 机器
下推自动机比有限自动机具有更强的识别能力。 有限自动机由于记忆功能不强,识别能力较弱。
有这样一种语言 L = {a^nb^n|n>=1},它由 n 个符号 a 连接到 n 个符号 b 组成。 那么如果我们想要识别这种语言的句子,我们需要记住读入的a的个数,有限自动机没有专门的记忆,所以它用不同的状态来记录a的个数n,其中a的个数n 接近无穷大。
有限自动机的状态数是有限的,因此这会导致有限自动机无法识别上述语言。
如果我们给有限自动机添加一个下推存储器,也就是一个堆栈,那么每当我们遇到输入符号a时,我们就将a压入堆栈,这样我们就可以将n个a压入堆栈。 ,然后从堆栈中弹出,而不会遇到输入符号 b。 如果字符串末尾弹出最后一个a,说明a和b的个数相同,这样L = {a^nb^就可以成功接收。 n|n>=1} 这个字符串
递归预测分析方法需要为文法中的每个非终结符号编写一个递归下降过程,因此其程序规模比较大,但不需要加载分析表
非递归预测分析方法的主控制程序很小。 虽然需要加载分析表,但是分析表也很小。
递归预测分析方法是根据产生式的正确部分编写程序,因此比较直观,而非递归预测分析方法则不太直观。
对于递归预测分析方法,高深度的递归调用需要递归子程序之间的连接,这会影响分析器的效率。
非递归分析方法的分析时间大致与待分析程序的长度成正比。
递归预测分析方法需要根据生产的正确部分编写流程,因此很难自动生成
非递归预测分析方法采用自动机方法,更容易自动生成。