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 ;
超级会员免费看
订阅专栏 解锁全文
218

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



