1

Lemon パーサー ジェネレーターが nonassoc の優先順位で間違っているように感じます。私が見ている問題を示す単純化された文法があります。

%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 バージョンと比較すると、競合はありません。そして、割り当ては実際には非関連であるべきです。これを回避するために、それについて嘘をつきたくはありません。

4

1 に答える 1