J'essaye de construire un lexer pour symboliser des mots isolés et des chaînes entre guillemets. Je suis arrivé ce qui suit:Antlr Lexer Quoted String Prédicat
STRING: QUOTE (options {greedy=false;} : .)* QUOTE ;
WS : SPACE+ { $channel = HIDDEN; } ;
WORD : ~(QUOTE|SPACE)+ ;
Pour les cas d'angle, il faut analyser:
"string" word1" word2
Comme trois jetons: "string"
STRING et word1"
et word2
comme WORD. Fondamentalement, s'il y a une dernière citation, elle doit faire partie de WORD si elle l'est. Si la citation est entourée d'espaces blancs, cela devrait être un MOT.
J'ai essayé cette règle pour mot, sans succès:
WORD: ~(QUOTE|SPACE)+
| (~(QUOTE|SPACE)* QUOTE ~QUOTE*)=> ~(QUOTE|SPACE)* QUOTE ~(QUOTE|SPACE)* ;