J'ai un aspect simple d'un DSL où je peux définir une clé et une valeur en tant que telle:Comment gérer des jetons dans des blocs de texte dans JavaCC?
mykey=\ This is my $REF{useful} multiline string where I terminate with a backslash but I support escaped \\ characters and I wish to handle the value part of this string as 3 blocks in this example. \
Les trois jetons (pour la partie de la valeur) Je voudrais dans cet exemple sont
- ValueLiteral == Ceci est mon
- valuereference == $ {REF utile}
- ValueLiteral == multiligne etc ....
I défini une règle pour la valeur en tant que telle:
void multiLineValue(): {} {
<BACKSLASH><EOL>
(
valuePartLiteralMulti() |
valuePartRef()
)*
<BACKSLASH>
}
Voici ma définition TOKEN pour le type de chaîne multiligne:
TOKEN :
{
< MULTILINE_STRING:( ((~["\\"])
| ("\\"
(["\\", "'", "\"", "$", "n", "r", "t", "b", "f"]
| ["u", "U"]["+"]["0"-"9","a"-"f","A"-"F"]["0"-"9","a"-"f","A"-"F"]["0"-"9","a"-"f","A"-"F"]["0"-"9","a"-"f","A"-"F"]
)
)))+>
}
Mon problème est que ma chaîne multi-ligne jeton type consomme également la séquence de caractères des caractères '$ REF {'.
Je voudrais modifier cette chaîne multiligne pour qu'elle arrête de consommer des caractères lorsqu'elle rencontre un "$ REF {" non échappé (mais continuera à lire après une séquence "\ $ REF {").
Toute aide serait grandement appréciée.