Bonjour,

J'ai un problème avec une grammaire relativement simple qui est chargée d'analyser l'entête d'un message composé ainsi: name ; id ; suivi du contenu réél du message. Or l'id est optionnel.

Exemple 1 : abc2;az23,12;moncontenu
Exemple 2 : abc2;moncontenu

Voici le code de ma grammaire:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
grammar test;
 
COMMA : ','; 
SEMI : ';';
CHAR : ('a'..'z'|'A'..'Z'|'.'|'-');
DIGIT : ('0'..'9');
TXTALPHA : (CHAR)+ ;
NUMBER : (DIGIT)+ ;
TXTALPHANUM : ((CHAR) | (DIGIT))+;
 
message	: name SEMI (id SEMI)? ;
 
name	: TXTALPHANUM	;
 
id	: ((TXTALPHANUM | TXTALPHA) COMMA NUMBER);
L'exemple 1 est bien interprété mais pas le deuxième. Le parseur tente d'écrire "moncontenu" dans la parti alphanumérique de l'id et renvoi un MismatchedTokenException ne trouvant de virgule par la suite (normal).

Après plusieurs test, j'ai remarqué que le problème n'apparait pas si je décris la partie "contenu" en remplaçant par exemple la règle message par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
message	: name SEMI (id SEMI)?  TXTALPHA;
Le problème étant que je peux me retrouver avec potentiellement n'importe quoi dans la partie contenu, je ne voudrais donc pas avoir à la décrire.

Quelqu'un verrait-il comment je pourrais résoudre cela ?
Merci.