【正确答案】LR(0)、SLR(1)和LR(1)分析表构造的主要差别在构造算法上。其区别如下:对LR(0)分析表来说,若项目A→α·属于Ik(状态),则对任何终结符a(包括结束符#),置ACTION[k,a]为“rj”,即用产生式A→α进行归约(j为产生式A→α的编号),所以在LR(0)分析表中,ACTION子表中行标为k的行全部填满“rj”,并且同一行的“rj”其下标j相同,而不同行的“rj”其下标不同。
对SLR(0)分析表来说,若项目A→α·属于Ik,则对任何输入符号a,仅当a∈FOLLOW(A.时置ACTION[k,a]为“rj”,即用产生式A→α进行归约(j为产生式A→α的编号),所以在SLR(0)分析表中,ACTION子表中行标为k的行不一定全部填满“rj”,并且SLR(0)分析表中同一行的“rj”其下标j一定相同。
对LR(1)来说,若项目[A→α·,a]属于Ik(状态),则置ACTION[k,a]为“用产生式A→α进行归约”,简记为“rj”。在LR(1)项目集规范族中假设有项目[A→α·,a]属于Ik(状态),此时应该置ACTION[k,a]为rj(A→α为第j个产生式),同时也可能出现项目[A→α·,b]属于Im(状态),此时也应该置ACTION[m,b]为rj。所以在LR(1)分析表的ACTION子表中,不同的行(即不同的状态)里可能会出现相同的rj,而在同一行也可能出现不同的rj。
所以,上面的(a)分析表为LR(1)分析表(在不同行有相同的r2存在);(b)为LR(0)分析表(有rj的行是每行都填满了rj且同一行rj的j相同,不同行rj的j不同);而(c)为SLR分析表(存在并不全部填满rj的行,且不同行rj的j不同)。
【答案解析】