SLR(1)预测分析表相关知识

  • 首先,SLR(1)分析器是自上而下语法分析里面的分析器;

步骤:(1)写出已知文法G的扩展文法G'

           (2)写出扩展文法G'的初始项目集

           (3)根据状态转移构建识别G'活前缀的DFA(项目集编号为I0-In)

           (4)计算G'的FIRST和FOLLOW集合

           (5)根据步骤(3)和(4)构建SLR(1)分析表

例:文法G如下所示,

                               E->E+T|T          T->T*F|F          F->(E)|-F|id

   (1)  G'     

                         E'->E                         (1)

                         E->E+T                     (2)

                        E->T                           (3)

                        T->T*F|F                    (4)

                        T->F                           (5)

                        F->(E)                         (6)

                       F->-F                           (7)

                       F->id                            (8)

  (2)  (3)

(4)  FIRST(E)={(, - , id }             FOLLOW(E)={# , + , ) }

           FIRST(T)={(, - , id }             FOLLOW(T)={# , + , ) ,* }

           FIRST(F)={(, - , id }             FOLLOW(F)={# ,+ , ) , * }

(5)预测分析表如下:

(6)对-id+id*id进行分析如下:

总结:第一步 令栈内容为#0,当前输入为-id+id*id(即要"分析的句子#"),动作为SLR(1)分析表中0行#列对应的动作。

          其余步骤遵循:当上一步骤动作为移进时(s),将当前输入移入一个字符和上一步骤移进动作后面的数字到栈内容中 ,再根据分析表中(当前栈最后的数字(纵坐标),当前输入第一个字符(横坐标))得出对应的动作;当上一步骤动作为规约时(r),按照规约后面的数字对当前栈内容进行规约,再将分析表中(当前栈最后的数字,当前栈规约得到的非终结符)得出对应的数字加入到当前栈内容中,然后由分析表中(更新后的栈最后数字,当前输入第一个字符)得出对应的动作。


注意:文章来源于转载

原文链接:http://blog.csdn.net/qq_36744540/article/details/73499641