¿Cómo especificar un paquete de destino para ANTLR?


Si llamo:

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

...con antlr-3.1.3 el código parser y lexer se generará en el directorio outdir/sources/com/example. Pero las clases generadas no tienen ninguna instrucción package. Los necesito para vivir en el paquete com.example.

¿Hay alguna forma de especificar el paquete de destino?

 39
Author: tangens, 2009-11-01

2 answers

ANTLR proporciona una herramienta de encabezado que le permite incluir paquetes e importaciones. Usted incluye esto en su *.g grammar file:

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

Y es posible que lo necesite en el Lexer también:

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

Y en caso de que necesite agregar algunos miembros y código:

@members {
    HashMap<String, Object> objectMap = new HashMap<String, Object>();
    //...

    private void addArrayValue(String content) {
    //... code required by snippets in the grammar

    }
}
 58
Author: peter.murray.rust,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-01 21:03:08

Una pregunta antigua con una respuesta perfectamente buena, pero ya que el comentario sobre la pregunta pedía una opción de línea de comandos (y eso era lo que estaba buscando cuando llegué aquí), pensé que solo tocaría y diría lo siguiente...

Puede especificar el paquete en la línea de comandos si está utilizando ANTLR 4. Yo revisé y parece que no está allí en la versión 3, por lo que la otra respuesta es el camino a seguir para ANTLR 3.

Aquí hay un ejemplo:

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

Consulte la opción -packageen Opciones de la línea de comandos de la herramienta ANTLR para obtener más información.

 22
Author: kmp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:02