[系列][编译原理]LR(0)分析算法的定义

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的转换相对应。

posted @ 2010-02-24 16:44  nothing123  阅读(575)  评论(0编辑  收藏  举报