假设已构造出文法的LR(0)项目集规范族和计算出所有非终结符的FOLLOW集合。 项目集规范族为:C={I0,I1,…,In},其中Ik为项目集的名字,k为状态名,令包含S′→·S项目的集合Ik的下标k为分析器的初始状态,求出所有非终结符的FOLLOW集。 那么SLR(1)分析表的动作(ACTION)表,和状态转换(GOTO)表构造步骤为: a) 若项目A→α·aβ属于Ik ,且转换函数GO(Ik,a)= Ij,当a为终结符时,则置ACTION[k,a]为Sj。 b) 若项目A→α·属于Ik,则对a为任何终结符或'#',且满足a∈FOLLOW(A)时,置ACTION[Ik,a]= rj,j为产生式A→α在文法G′中的编号。 c) 若GO(Ik,A)= Ij,则置GOTO[k,A]=j,其中A为非终结符,j为某一状态号。 d) 若项目S′→S·属于Ik,则置ACTION[k,#]=acc,表示接受。 e) 凡不能用上述方法填入的分析表的元素,均应填上"报错标志",在表中用空白标志,用上述步骤对算术表达式文法构造改进的SLR(1)分析表如表7.8。 |