我有以下 Bison 语法片段:
二进制操作:二进制操作
{
...
}
| '|' %prec BINARY_OP
{
...
}
;
non_keyword_expr: non_keyword_expr binary_op non_keyword_expr %prec BINARY_SEND_PREC %dprec 2
{
...
}
;
|在我的语法中有重载的含义,所以我不能只从词法分析器中将它作为标记 BINARY_OP 返回。根据上下文,它可能是不同的标记。
如果我使用它作为我的输入:
4 OR 5 OR 6
我可以成功解析它(或被词法分析器识别为 BINARY_OP 令牌)。
但是,如果我的输入是这样的:
4 | 5 | 6
我得到一个模棱两可的语法错误。(|不被识别为左联想)
如何让binary_op在non_keyword_expr中保持左关联?%prec关于binary_op的第二条规则的声明似乎没有效果。
编辑:这是一个 GLR 解析器