Je travaille sur un projet pour l'école avec la conversion d'une forme BNF Decaf spec en une grammaire sans contexte et la construction dans ANTLR. J'y ai travaillé pendant quelques semaines et je suis allée chez le professeur quand je suis coincé, mais j'ai finalement rencontré quelque chose qui, selon lui, ne devrait pas causer d'erreur. Voici la partie isolée de ma grammaire, expr est le point de départ. Avant de faire cela, j'ai une question.ambiguïté ANTLR dans DeCaf - professeur ne sait pas où l'erreur est
Est-ce que cela importe si mes règles lexer apparaissent avant mes règles d'analyseur dans ma grammaire, ou si elles sont mélangées par intermittence à travers mon fichier de grammaire?
calloutarg: expr | STRING;
expr: multexpr ((PLUS|MINUS) multexpr)* ;
multexpr : atom ((MULT|DIVISION) atom)*
;
atom : OPENPAR expr CLOSEPAR | ID ((OPENBRACKET expr CLOSEBRACKET)? | OPENPAR ((expr (COMMA)*)+)? CLOSEPAR)|
CALLOUT OPENPAR STRING (COMMA (calloutarg)+ COMMA)? CLOSEPAR | constant;
constant: INT | CHAR | boolconstant;
boolconstant: TRUE|FALSE;
La mise en forme est laide parce qu'une partie de ses conseils pour le débogage était de prendre des règles individuelles et les décomposer où l'ambiguïté est de voir où les erreurs commencent. Dans ce cas, il est dit que le problème est dans la partie ID longue, que OPENBRACKET et OPENPAR sont la cause. Si vous avez des idées, je suis profondément reconnaissant. Merci, et désolé pour la façon dont le formatage est désagréable sur le code que j'ai posté.
Merci pour votre aide! Une question que j'ai eue, pourquoi mon affacturage de gauche ne prendrait pas soin de l'ID | ID [| ID (problème? – Nick
@Nick, voir le ** EDIT ** à ma réponse. –