Je suis en train de créer un fichier de grammaire antlr très simple qui doit analyser le fichier suivant:Quel est le problème avec ma grammaire antlr simple?
Report (MyReport)
Begin
End
Ou sans nom du rapport:
Report
Begin
End
Et voici mon fichier de grammaire:
grammar RL;
options {
language = Java;
}
report:
REPORT ('(' SPACE* STRING_LITERAL SPACE* ')')?
BEGIN
END
;
REPORT
: 'Report'
;
BEGIN
: 'Begin'
;
END : 'End';
NAME: LETTER (LETTER | DIGIT | '_')*;
STRING_LITERAL : NAME SPACE*;
fragment LETTER: LOWER | UPPER;
fragment LOWER: 'a'..'z';
fragment UPPER: 'A'..'Z';
fragment DIGIT: '0'..'9';
fragment SPACE: ' ' | '\t';
WHITESPACE: SPACE+ { $channel = HIDDEN; };
rule: ;
Cependant, lorsque je débogue dans ANTLRWorks, j'obtiens toujours l'erreur suivante:
root -> report -> MismatchedTokenException(0!=0)
Qu'est-ce qui ne va pas dans mon fichier Grammar?
grâce, vert
Merci beaucoup. Que faire si je souhaite autoriser "ESPACE" dans le champ "NOM du rapport"? –
@vert, je vous en prie. Voir ma réponse éditée. –
J'ai suivi l'approche "nom_rapport" et j'ai obtenu cette erreur: "T: \ tmp \ RL \ RL.g: 11: 1: Les définitions de jeton suivantes ne peuvent jamais être mises en correspondance car les jetons précédents correspondent à la même entrée: REPORT_NAME".Le code source est à https://gist.github.com/2991022 –