解决减少-减少冲突

问题描述 投票:0回答:0

以下是我写的语法部分,

在这里,您可以看到如果找到令牌

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 选择的那些会正确解析语法吗?对吗?

我在问是否有任何解决方案可以消除这种歧义,如果没有,我应该选择什么其他方法?我的主要动机是让野牛使用正确的语法,即使它们之间存在冲突。

parsing compiler-construction grammar bison flex-lexer
© www.soinside.com 2019 - 2024. All rights reserved.