Comment spécifier un package cible pour ANTLR?

Si j’appelle:

java org.antlr.Tool -o outdir sources/com/example/Java5.g 

… avec antlr-3.1.3, l’parsingur et le code lexer seront générés dans le répertoire outdir/sources/com/example . Mais les classes générées n’ont aucune déclaration de package . J’en ai besoin dans le package com.example .

Existe-t-il un moyen de spécifier le package cible?

ANTLR fournit un outil d’en-tête qui vous permet d’inclure le package et les importations. Vous l’incluez dans votre fichier de grammaire * .g:

 @header { package org.xmlcml.cml.converters.antlr; import java.util.HashMap; } 

Et vous pouvez aussi en avoir besoin dans Lexer:

 @lexer::header {package org.xmlcml.cml.converters.antlr;} 

et au cas où vous devez append des membres et du code:

 @members { HashMap objectMap = new HashMap(); //... private void addArrayValue(Ssortingng content) { //... code required by snippets in the grammar } } 

Une vieille question avec une réponse tout à fait correcte, mais comme le commentaire sur la question demandait une option en ligne de commande (et c’était ce que je cherchais en fait ici), je pensais que je voulais juste dire quelque chose …

Vous pouvez spécifier le paquet sur la ligne de commande si vous utilisez ANTLR 4. J’ai vérifié et il semble ne pas y en avoir dans la version 3, donc l’ autre réponse est la voie à suivre pour ANTLR 3.

Voici un exemple:

 java -cp antlr-4.4-complete.jar org.antlr.v4.Tool -package my.package MyGram.g4 

Voir l’option -package dans les options de ligne de commande de l’outil ANTLR pour plus d’informations.