我正在尝试使用Beaver来解析包含reduce / reduce冲突的语法。预计会发生冲突。其他解析器生成器支持说%expect 0 1
之类的东西,以指定一个减少/减少冲突,但Beaver似乎不支持这一点。如何告诉Beaver忽略已知的减少/减少冲突并生成解析器?
答案 0 :(得分:2)
Beaver can't do that,但您可以使用%left,%right或%nonassoc指令来定义关联性和优先级规则。
我假设您不关心在发生冲突时执行哪种减少(因为解析树是相同的,或者因为它们对于您的目的是相同的)。因此,您定义哪个优先级并不重要,只需定义足够的优先级。
假设操作员OP1和OP2之间存在冲突,则以下指令将解决您的冲突。
%nonassoc OP1;
%nonassoc OP2;
但是,如果冲突在两个具有相同运算符(OP)的演绎规则之间,那么您需要
%left OP;
或
%right OP;