LR(0)分析算法的定义
令s为当前状态(位于分析栈顶部)。则动作如下:
1. 若状态s包含格式A->a.Xb的任何项目,其中X是一个终结符,则动作就是将当前的输入级号移进到栈中。若这个记号是X,且状态s包含了项目A->a.Xb,则压入到栈中的新状态就是包含了项目A->aX.b的状态。若由于位于刚才所描述的格式的状态s中的某个项目,这个记号不是X,则声明一个错误。
2. 若状态s包含了任何完整的项目(格式A->y.的一个项目),则动作是用规则A->y归约。假设输入为空,用规则S'->S归约(其中S是开始状态)与接受等价;若输入不为空,则出现错误。在所有其他情况中,新状态的计算如下:将串y及它的所有对应状态从分析栈中删去(根据DFA的构造方式,串y必须位于栈的顶部)。相应的,在DFA中返回到由y开始构造的状态中。由于构造DFA,这个状态就还须包含格式B->a.Ab的一个项目。将A压入到栈中,所以这与在DFA中跟随A的转换相对应。