木兰语言 0.0.17.2 实现简易网页浏览器,又一次碰到语法歧义
上周试用木兰语言加 QtWebkit 实现简易网页浏览器(已开源在 Gitee ,81 行代码)时,发现需要复现带参数的 super: super(演示, self).__init__() 实现过程中,又一次遇到了这个头疼的报错: ParserGeneratorWarning: 1 shift/reduce conflict 去年碰到过几次,都是通过照着逆向工程设置词的优先级来规避,没有深究调试方法,这次决定下点功夫搞清楚缘由。 rply 的调试信息有限,貌似 七年前就是如此,包括 shift/reduce 在内的所有信息都极简,项目现在似乎也没有什么改进的迹象。由于它是参考 ply 重写的,于是查看了 ply 对歧义语法的调试信息示例。纠结了一下是把木兰用 ply 重写还是修改 rply 来获得类似调试信息,决定走后者。 这里记一下:任何框架或工具,包括编程语言,可调试性——即告知用户“哪儿出错了?”——对于可用性非常非常重要。任何的反馈信息,包括警告、报错,都应以用户可理解、问题可定位、提供解决方案为首要目标。 首先,分别创建了 ply 和 rply 的最简歧义演示。语法如...


