Bison语法中的歧义、冲突及错误处理
1. Bison语法冲突类型及解决方法
在使用Bison进行语法解析时,可能会遇到多种冲突问题,下面详细介绍不同类型的冲突及其解决办法。
1.1 嵌套循环冲突(Shift/Reduce)
当语法中有两个嵌套的列表创建循环,且没有标点符号来表示外部列表条目的边界时,就会出现这种冲突。例如:
start: outerList Z ;
outerList: /* empty */
| outerList outerListItem ;
outerListItem: innerList ;
innerList: /* empty */
| innerList innerListItem ;
innerListItem: I ;
解决这种冲突的方法取决于你希望将重复项视为一个外部循环和多个内部循环,还是多个包含一个内部循环的外部循环。
- 多个外部循环 :移除内部循环
start: outerList Z ;
outerList: /* empty */
| outerList innerListItem ;
innerListItem: I ;
- 多个内部循环 :移除外部循
超级会员免费看
订阅专栏 解锁全文
132

被折叠的 条评论
为什么被折叠?



