自底向上的语法分析
从叶结点到根节点。采用最左规约的方式(反向构造最优推导)。
通用框架:(移入-归约分析Shift-Reduce Parsing)
移入-归约分析(Shift-Reduce Parsing)
对输入串从左到右的分析,将一个或多个输入符号移入到栈的顶端,直到可以规约为止。
关键问题:移入-规约会出现问题,所以引入LR文法。
LR分析法
是最大的、可以构造出相应的移入-规约语法分析器的文法类。
LR(k)指需要向前查看k个输入符号的LR分析。
包含三个状态:
s是移入动作,r是规约动作。
LR的分析算法:
LR(0)项目
增广文法,保证分析器只有一个接受状态。
初始项目
接收项目
规约项目
后继项目:同属一个产生式的项目,但是点在一个之后。
项目的等价性:当圆点后面是非终结符的时候,就有等价项目,把所有等价项目放在一起,就是一个有穷自动机的一个状态。
利用CLOUSE函数,计算一个状态。
GOTO函数
LR(0)分析表构造算法:
存在移进-规约,规约-规约冲突。
利用FOLLOW集来判断是移进还是规约。
SLR分析
也是SLR(1)分析,只需要向前查看一个字符,就可以判断怎么做。
SLR分析表构造:
仅仅利用FOLLOW集还是不够的,需要引入更加强大的分析法。
LR(1)分析法
就是观察下一个字符,来判断是否进行规约。