以下是我写的语法部分,
在这里,您可以看到如果找到令牌
reduce/reduce
就会有 PUBLIC_KEYWORD
冲突,因为它有两个规则(constant_modifier -> PUBLIC_KEYWORD
和 interface_method_modifier -> PUBLIC_KEYWORD
)。我的Java语法中有很多这样的冲突,我只展示这两个。
主要问题是因为有终端
constant_modifier_one_or_more
,它基本上是*
操作员。如果它只是一个终端,那么我会在主要生产规则中添加每个终端,就像这里的 constant_declaration
一样。但是,我不能在这里这样做。
此外,我想不出任何理论上的解决方案来消除这种歧义。我正在关注 Oracle java Manual。由于这是官方语法规则,我认为如果我按原样从上到下编写语法,那么由于通过选择代码库中较早放置的规则来消除 Bison 中的减少/减少冲突,因此规则可能是可能的Bison 选择的那些会正确解析语法吗?对吗?
我在问是否有任何解决方案可以消除这种歧义,如果没有,我应该选择什么其他方法?我的主要动机是让野牛使用正确的语法,即使它们之间存在冲突。