我在Bison文件中有以下语法:
lst: ID COMMA lst
| ID
| /*empty*/
plst: lst SEMICOLON lst
| SEMICOLON lst
| lst
第一条规则实际上是否尝试映射id1,id2,id3...
第二个想要映射一个由分号分隔的可靠的列表。允许的可能性有:id11,id12,id13...;id21,id22,id23...
,id1,id2,id3...
或;id1,id2,id3...
。
我想知道这是否是一套正确的规则,因为Bison正在返回许多冲突。我认为其中一个可能的问题可能不是很好的规则。所以我的问题是:前面提到的一套规则,是一个好的规则还是容易发生的?三江源。
答案 0 :(得分:2)
问题是您允许lst
为空。所以没有办法区分:
lst ';' lst
和
';' lst
换句话说,lst
是空的还是不存在?语法含糊不清。
我会移除lst
的空制作,但还有其他解决方案。