我覺得檸檬語法分析器生成器在非關聯優先級上做錯了。我有一個簡化的語法,展現了我所看到的問題。檸檬是否正確處理非關聯優先?
%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
如果我告訴它相當於是左結合的,問題消失。就好像nonassoc不會將規則放入優先級集合中一樣。與該語法的Bison版本相比,沒有衝突。而任務確實應該是非關聯性的。我寧願不要對此撒謊以解決這個問題。