我正在尝试使用Beaver解析包含减少/减少冲突的语法。预计会发生冲突。其他解析器生成器支持说一些类似的东西%expect 0 1
来指定一个减少/减少冲突是预期的,但 Beaver 似乎不支持这一点。如何告诉 Beaver 忽略已知的 reduce/reduce 冲突并生成解析器?
问问题
431 次
1 回答
3
Beaver 不能这样做,但您可以使用 %left、%right 或 %nonassoc 指令来定义关联性和优先级规则。
我假设您不在乎在发生冲突时执行哪个 reduce(因为解析树是相同的,或者因为它们对于您的目的是相同的)。因此,定义哪些优先级对您来说并不重要,只要定义足够的优先级即可。
假设操作员 OP1 和 OP2 之间存在冲突,那么以下指令将解决您的冲突。
%nonassoc OP1;
%nonassoc OP2;
但是,如果冲突发生在具有相同运算符 (OP) 的两个扣除规则之间,那么您需要
%left OP;
或者
%right OP;
于 2013-10-06T11:53:33.203 回答