0

我在 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 正在返回许多冲突。我认为可能的问题之一可能是规则不完善。所以我的问题是:前面提到的一套规则,是好的还是容易发生冲突?谢谢你。

4

1 回答 1

2

问题是您允许lst为空。所以没有办法区分:

lst ';' lst

';' lst

换句话说,是lst空的还是不存在的?语法模棱两可。

我会删除 的空产品lst,但还有其他解决方案。

于 2013-09-24T23:13:21.350 回答