J'écris un compilateur de Pascal (réduit) en ARM asm. Je suis à la deuxième étape du processus - après avoir écrit l'analyseur lexical maintenant je travaille sur l'analyse syntaxique avec java cup.Comment résoudre shift réduire les conflits dans ma grammaire?
J'ai écrit ma grammaire, mais j'ai eu 5 conflits S/R, qui sont tous très similaires. Exemple:
Warning : *** Shift/Reduce conflict found in state #150
between assign_stmt ::= val_expr ASSIGN val_expr (*)
and val_expr ::= val_expr (*) LBRACKET val_expr RBRACKET
under symbol LBRACKET
Resolved in favor of shifting
Ma grammaire pour cette section:
assign_stmt ::=
val_expr ASSIGN val_expr;
val_expr ::=
NIL | BOOL_CONST | INT_CONST | CHAR_CONST | PTR val_expr %prec MEM | ADD val_expr %prec UADD |
SUB val_expr %prec USUB | NOT val_expr | val_expr PTR %prec VAL | val_expr MUL val_expr |
val_expr DIV val_expr | val_expr ADD val_expr | val_expr SUB val_expr | val_expr EQU val_expr |
val_expr NEQ val_expr | val_expr LTH val_expr | val_expr GTH val_expr | val_expr LEQ val_expr |
val_expr GEQ val_expr | val_expr AND val_expr | val_expr OR val_expr | IDENTIFIER |
val_expr LBRACKET val_expr RBRACKET | val_expr DOT IDENTIFIER | IDENTIFIER LPARENTHESIS params_list RPARENTHESIS |
LBRACKET type_desc RBRACKET | LPARENTHESIS val_expr RPARENTHESIS
;
Comment pourrais-je éliminer ce conflit?
Merci.
Vous devriez probablement étiqueter cette question avec le générateur d'analyseur que vous utilisez - ou au moins le mentionner quelque part dans la question. – sepp2k
J'ai mentionné java cup, mais je ne peux pas ajouter le tag, car vous avez besoin de 1,5k réputation pour ajouter de nouveaux tags. –