12.4 优化的 LR(1) 分析法: LALR(1)

从前面的内容可以看出, LR(1) 分析法的构造过程十分复杂,且状态和形态的数量都非常之多,即便是本章第一节的仅仅含 4 个产生式的如此简单的例子,也多达 9 个状态和 27 条形态,如下:images/lr1_1.png图12.2 状态转移图

上面这个图中, I3 和 I6 几乎是一样的,I4 和 I7 、以及 I8 和 I9 也非常的相似,可以将这样的状态 merge 起来,形成下面这样的状态转移表:images/lr1_2.png图12.3 状态转移图

可以看出 merge 后的状态总数少了 3 个,可节省动作表的空间,解析速度也有较大的提高。这种将相似状态 merge 起来的分析法称为 LALR(1) 分析法,这是很多编译器所采用的分析方法。具体的 merge 算法比较复杂,本文档就不介绍了,因为 LALR(1) 分析的基本构造流程和解析流程和 LR(1) 分析法是一样的。

第 12 章完