2009-10-31 15 views
38

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

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

... con antlr-3.1.3 se generará el código del analizador léxico y en el directorio outdir/sources/com/example. Pero las clases generadas no tienen ninguna declaración package. Los necesito para la vida en el paquete com.example.

¿Hay alguna manera de especificar el paquete de destino?

+0

Estoy seguro de que hay. Lo veré en el trabajo el lunes;) – Jorn

+0

En http://www.jguru.com/faq/view.jsp?EID=16185 explican cómo insertar el paquete dentro de la gramática. Pero, ¿hay alguna manera de especificarlo como parámetro de línea de comando? – tangens

Respuesta

56

ANTLR proporciona una herramienta de encabezado que le permite incluir paquetes e importaciones. Usted incluye esto en su archivo de gramática * .G:

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

Y que lo necesite en el lexer así:

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

y en caso de que necesite añadir 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 

    } 
} 
+2

Gracias por incluir el bit sobre los miembros y el código, aunque no lo haya solicitado. +1 –

22

Una vieja pregunta con una respuesta perfectamente buena, pero dado que el comentario sobre la pregunta requería una opción de línea de comando (y eso era lo que realmente estaba buscando cuando llegué), pensé que simplemente sonaría y decir la siguiente mugidos ...

Puede specifiy el paquete en la línea de comandos si está utilizando antlr 4. checked y parece no estar allí en la versión 3 así que la respuesta other es el camino a seguir para antlr 3.

Aquí se muestra un ejemplo:

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

ver la opción de -package en ANTLR Tool Command Line Options para más información.

+1

La documentación "Opciones de línea de comandos de la herramienta ANTLR" requiere credenciales para acceder. Aquí hay una documentación abierta de antlr4: https://github.com/antlr/antlr4/blob/master/doc/index.md – EFreak

+0

Opciones de la línea de comando de la herramienta ANTLR: https://github.com/antlr/antlr4/blob/master /doc/tool-options.md – EFreak

+0

Gracias @EFreak - He ajustado el enlace en la pregunta a su sugerencia – kmp

Cuestiones relacionadas