Je suis complètement nouveau pour les grammaires ANTLR et EBNF, donc c'est probablement un problème de base que je ne comprends tout simplement pas.ANTLR MismatchedTokenException sur une grammaire simple
J'ai une règle telle que:
version_line : WS? 'VERS' WS? '=' WS? '1.0' WS? EOL ;
WS : ' '+ ;
EOL : '\r' | '\n' | '\r\n' | '\n\r' ;
qui correspond à une déclaration dans mon fichier d'entrée qui ressemble à ceci (avec un espace en option):
Avec la forme de règleVERSION = 1.0
ci-dessus, je Je reçois une correspondance réussie, bien que j'obtienne une exception avec ce formulaire:
version_line : WS? 'VERS' WS? '=' WS? '1' '.0' WS? EOL ;
ou ce formulaire:
version_line : WS? 'VERS' WS? '=' WS? DIGIT '.0' WS? EOL ;
DIGIT : '1' ;
Pourquoi est-ce différent? J'ai découvert ce problème en essayant de décomposer la règle encore plus, la fin nous l'espérons avec quelque chose comme ceci:
version_line : WS? 'VERS' WS? '=' WS? DIGIT '.' DIGIT WS? EOL ;
DIGIT : '0'..'9' ;
Hmm, vous avez raison. Cela doit être un problème avec les conflits ailleurs dans le fichier. Vous m'avez donné une bonne idée de la façon de le déboguer, (commencez à partir d'une règle et développez lentement). – jjkparker
@jjkparker, oui, c'est comme ça que je le fais aussi: écrivez quelques règles, testez-le. Écrivez d'autres règles, testez-le, etc. –