【发布时间】:2014-06-05 04:06:00
【问题描述】:
我觉得 Lemon 解析器生成器在使用非关联优先级时做错了。我有一个简化的语法来展示我所看到的问题。
%nonassoc EQ.
%left PLUS.
stmt ::= expr.
expr ::= expr EQ expr.
expr ::= expr PLUS expr.
expr ::= IDENTIFIER.
生成具有如下冲突的报告:
State 4:
expr ::= expr * EQ expr
(1) expr ::= expr EQ expr *
expr ::= expr * PLUS expr
EQ shift 2
EQ reduce 1 ** Parsing conflict **
PLUS shift 1
{default} reduce 1
如果我告诉它 equals 是左关联的,那么问题就消失了。就好像 nonassoc 没有将规则放入优先级集中。与该语法的 Bison 版本相比,没有冲突。分配确实应该是非关联的。为了解决这个问题,我宁愿不撒谎。
【问题讨论】:
标签: lemon