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 ;- 多个内部循环