语法分析(13)...
2016-05-27 12:25
260 查看
最后我们来分析一下这个所谓的LR(0)分析算法...
图中第二个L应该是R, 然后所谓的0个前看符号我确实不太能够理解, 据说要和lr(1)比较了才知道, 接下来研究它的缺点(说实话感觉能分析的文法有限这不是ll(1)的缺点吗? 不说说lr类算法没有这类缺点吗? )
接下来就是具体的错误分析实例了...
据说根据左上角推导得出的分析表是这样的, 然后其实对于状态3, 不管接受x, y, $都能做归约(但实际上只有$, 其他都应该报错, 这样会导致多次循环分析导致错误定位)... 但是说实话不太理解为什么之前的表生成算法为什么会生成这张表, 感觉如果严格按照表生成算法的话, 三号状态对于x, y, $ 都应该是空的而不是r2(都不知道r2是怎么生成的...) 个人猜测是这样, 当算法检测到分析点(就是图中的黑点, 左边代表已经分析过的字符, 右边代表期待看到的字符)已经到达末尾, 此时不管期待看到什么字符都要先归约在分析, 所以一旦碰到这种情况, 所有的字符一律填归约, 但是算法里面也没有提到具体是不是这样, 只是猜想而已...
另外一个问题是冲突:
可以看状态3, 此时如果在状态3, 既可以移进, 又可以归约, 就出现了冲突...
为了解决这两问题, 这里提出一种lr改进算法叫做SLR :
图中第二个L应该是R, 然后所谓的0个前看符号我确实不太能够理解, 据说要和lr(1)比较了才知道, 接下来研究它的缺点(说实话感觉能分析的文法有限这不是ll(1)的缺点吗? 不说说lr类算法没有这类缺点吗? )
接下来就是具体的错误分析实例了...
据说根据左上角推导得出的分析表是这样的, 然后其实对于状态3, 不管接受x, y, $都能做归约(但实际上只有$, 其他都应该报错, 这样会导致多次循环分析导致错误定位)... 但是说实话不太理解为什么之前的表生成算法为什么会生成这张表, 感觉如果严格按照表生成算法的话, 三号状态对于x, y, $ 都应该是空的而不是r2(都不知道r2是怎么生成的...) 个人猜测是这样, 当算法检测到分析点(就是图中的黑点, 左边代表已经分析过的字符, 右边代表期待看到的字符)已经到达末尾, 此时不管期待看到什么字符都要先归约在分析, 所以一旦碰到这种情况, 所有的字符一律填归约, 但是算法里面也没有提到具体是不是这样, 只是猜想而已...
另外一个问题是冲突:
可以看状态3, 此时如果在状态3, 既可以移进, 又可以归约, 就出现了冲突...
为了解决这两问题, 这里提出一种lr改进算法叫做SLR :
相关文章推荐
- 自定义ImageView实现圆形头像
- Centos7安装RocketMQ及配置测试
- Linux C编程章节六:进程管理和通信
- Centos7安装RocketMQ及配置测试
- WinSock IO模型
- [Ruby笔记]15.@instance_variable 以及 糖“在方法名中可使用=”
- iOS 通讯录详解
- QQ空间首页背景图片淡出解析与不足完善
- ImageLoaderUtils配置
- 队列列列列!!!!!
- Linux C编程章节五:网络编程
- LeetCode 291. Word Pattern II
- Nagios页面介绍(四)
- jetbrain的产品注册,webstorm,idea 注册
- 做编程开发,要偏执
- 【Apache】从Apache官网下载windows版apache服务器,并用AB进行压力测试
- 经典语句(英文)
- 使用Audio API中的playlist来做一个音乐播放器
- samba服务配置详解
- JAVA学习(4)位运算