2013-02-18 79 views
1

我试图用Beaver来解析包含reduce/reduce冲突的语法。预计冲突。其他解析器生成器支持说类似%expect 0 1来指定预期会出现一个reduce/reduce冲突,但Beaver似乎不支持这种情况。我如何告诉海狸忽略已知的减少/减少冲突并生成解析器?如何告诉海狸忽略减少/减少冲突?

回答

2

Beaver can't do that,但您可以使用%left,%right或%nonassoc指令来定义关联性和优先级规则。

我认为你不在意在发生冲突时执行哪种reduce(或者因为分析树是相同的,或者因为它们对于你的目的是相同的)。因此,您应该无所谓其中优先级您定义,只是您定义足够优先。

假设冲突在操作员OP1和OP2之间,那么以下指令将解决您的冲突。

%nonassoc OP1; 
%nonassoc OP2; 

然而,如果冲突是二扣规则之间使用相同的运营商(OP),那么你需要或者

%left OP; 

%right OP;