Grammar 这个定义有什么错误吗?

Grammar 这个定义有什么错误吗?,grammar,bison,context-free-grammar,formal-languages,Grammar,Bison,Context Free Grammar,Formal Languages,我在一个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文件中有以下语法:

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…


我想知道这是否是一套正确的规则,因为野牛返回了许多冲突。我认为其中一个可能的问题可能是规则不完善。所以我的问题是:上面提到的一套规则,是好的还是容易产生冲突?谢谢。

问题是您允许
lst
为空。因此,无法区分:

lst ';' lst

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

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

';' lst