我们知道LR(1)分析表在计算的时候所生成的规范簇集大小会原地升天——一套简约的程序语言,它动则生成六百多项甚至一千多项的规范簇,分析表的体积非常膨胀(好吧这着实让人无法忍受...忍无可忍了)。为了解决这种问题,我们可以想办法精炼文法,或者使用另一些分析技术——LALR(1),Look - Ahead LR(1)分析法。
减少LR(1)分析表大小的一种重要方案是减少产生式的数目,即精简文法。例如我们传统的表达式文法:
Goal -> Expr
Expr -> Expr + Term
Expr -> Expr - Term
Expr -> Term
Term -> Term * Fact
Term -> Term / Fact
Term -> Fact
Fact -> num
Fact -> ( Expr )
此时我们为它生成LR(1)分析表,r表示归约(Reduce)动作,s表示移进(shift)动作: