0
私は、次の文法を持っている:yacc文法でshift-reduce conflictを削除するには?
Expression
: SimpleExpression {$$ = $1;};
| SimpleExpression LTnum SimpleExpression
{ MkLeftC($1, $2); $$ = MkRightC($3, $2); }
| SimpleExpression LEnum SimpleExpression
{ MkLeftC($1, $2); $$ = MkRightC($3, $2); }
| SimpleExpression EQnum SimpleExpression
{ MkLeftC($1, $2); $$ = MkRightC($3, $2); }
| SimpleExpression NEnum SimpleExpression
{ MkLeftC($1, $2); $$ = MkRightC($3, $2); }
| SimpleExpression GEnum SimpleExpression
{ MkLeftC($1, $2); $$ = MkRightC($3, $2); }
| SimpleExpression GTnum SimpleExpression
{ MkLeftC($1, $2); $$ = MkRightC($3, $2); }
;
SimpleExpression
: PLUSnum Term op_terms
{ $$ = MakeTree(AddOp,$3,$2); }
| MINUSnum Term op_terms
{ $$ = MakeTree(SubOp,$3,$2); }
;
op_terms
: PLUSnum Term
{ $$ = MakeTree(AddOp,NullExp(),$2); }
| PLUSnum Term op_terms
{ $$ = MakeTree(AddOp,$3,$2); }
| MINUSnum Term
{ $$ = MakeTree(SubOp,NullExp(),$2); }
| MINUSnum Term op_terms
{ $$ = MakeTree(SubOp,$3,$2); }
| ORnum Term
{ $$ = MakeTree(OrOp,NullExp(),$2); }
| ORnum Term op_terms
{ $$ = MakeTree(OrOp,$3,$2); }
;
私は、次のシフト削減y.outputファイル内の競合を取得:
51: shift/reduce conflict (shift 74, reduce 57) on GTnum
51: shift/reduce conflict (shift 75, reduce 57) on NEnum
51: shift/reduce conflict (shift 76, reduce 57) on EQnum
51: shift/reduce conflict (shift 77, reduce 57) on GEnum
51: shift/reduce conflict (shift 78, reduce 57) on LEnum
51: shift/reduce conflict (shift 79, reduce 57) on LTnum
state 51
Expression : SimpleExpression . (57)
Expression : SimpleExpression . LTnum SimpleExpression (58)
Expression : SimpleExpression . LEnum SimpleExpression (59)
Expression : SimpleExpression . EQnum SimpleExpression (60)
Expression : SimpleExpression . NEnum SimpleExpression (61)
Expression : SimpleExpression . GEnum SimpleExpression (62)
Expression : SimpleExpression . GTnum SimpleExpression (63)
私はこれらの競合の除去を支援する必要があります。私はここで間違って何をしていますか?私は優先ルールを設定しようとしましたが、どういうわけかここではうまくいかないようです。何か案は?
私は文法を上記のものに変更しましたが、私はまだ同じ矛盾があります。 – ExeCode
助けてくれてありがとうございました。 – ExeCode