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:
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).
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);
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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 message : name SEMI (id SEMI)? TXTALPHA;
Quelqu'un verrait-il comment je pourrais résoudre cela ?
Merci.
Partager