1

我正在尝试使用Beaver解析包含减少/减少冲突的语法。预计会发生冲突。其他解析器生成器支持说一些类似的东西%expect 0 1来指定一个减少/减少冲突是预期的,但 Beaver 似乎不支持这一点。如何告诉 Beaver 忽略已知的 reduce/reduce 冲突并生成解析器?

4

1 回答 1

3

Beaver 不能这样做,但您可以使用 %left、%right 或 %nonassoc 指令来定义关联性和优先级规则。

我假设您不在乎在发生冲突时执行哪个 reduce(因为解析树是相同的,或者因为它们对于您的目的是相同的)。因此,定义哪些优先级对您来说并不重要,只要定义足够的优先级即可。

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

%nonassoc OP1;
%nonassoc OP2;

但是,如果冲突发生在具有相同运算符 (OP) 的两个扣除规则之间,那么您需要

%left OP;

或者

%right OP;
于 2013-10-06T11:53:33.203 回答