SLR(1)预测分析表的构建以及对句子的分析步骤
2017-06-20 17:35
656 查看
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),按照规约后面的数字对当前栈内容进行规约,再将分析表中(当前栈最后的数字,当前栈规约得到的非终结符)得出对应的数字加入到当前栈内容中,然后由分析表中(更新后的栈最后数字,当前输入第一个字符)得出对应的动作。
以上总结仅个人理解,仅供参考,具体的算法相关教材上都有,不过不好理解;本人才疏学浅,若有什么错误,请多多指教。
相关文章推荐
- Android lunch分析以及产品分支构建
- SLR,语法分析表的构建
- [cp] SLR分析表的生成 以及分析程序 (2)
- 预测建模步骤分析1
- MyBatis源码分析(4)—— Cache构建以及应用
- VS2005+CE6+VS2008的安装步骤以及出错分析
- python用最小二乘法分析数据趋势以及做数据预测
- [cp] SLR分析表的生成 以及分析程序(3)
- 细谈构建高性能的网站架构以及名站架构分析一览------my note
- Android lunch分析以及产品分支构建
- xfire构建webservice项目步骤以及使用
- Android lunch分析以及产品分支构建
- Android lunch分析以及产品分支构建
- [cp] SLR 分析表的生成以及分析程序 (1)
- HDFS数据资源使用量分析以及趋势预测
- Android lunch分析以及产品分支构建
- QT支持鼠标与触摸屏的步骤,以及鼠标事件和触摸板事件的完整分析
- Android lunch分析以及产品分支构建
- 【ESP8266】ESP8266_NONOS_SDK开发包生成的镜像文件构建步骤分析
- 自己标注(不注意坑不少)-Spark+Kafka构建实时分析Dashboard案例——步骤三:Spark Streaming实时处理数据