Pregunta

Estoy intentando llamar a una tarea de Antlr en mi build.xml de Ant de la siguiente manera:

<path id="classpath.build">
  <fileset dir="${dir.lib.build}" includes="**/*.jar" />
</path>

...

<target name="generate-lexer" depends="init">
  <antlr target="${file.antlr.lexer}">
    <classpath refid="classpath.build"/>
  </antlr>
</target>

Pero Ant no puede encontrar la definición de tarea. He puesto todo lo siguiente en ese dir.lib.build :

  • antlr-3.1.jar
  • antlr-2.7.7.jar
  • antlr-runtime-3.1.jar
  • stringtemplate-3.2.jar

Pero ninguno de ellos parece tener la definición de tarea. (También he intentado colocar esos frascos en mi ruta de clase Ant; mismo problema.)

¿Fue útil?

Solución

El tarro actual de tareas de Antlr está disponible en http: // www. antlr.org/share/1169924912745/antlr3-task.zip

Se puede encontrar en el sitio web antlr.org en la sección " Compartir archivos " partida.

Otros consejos

Deberías usar el jar antlrall.jar. Puede continuar y soltarlo en su instalación de Ant, pero eso significa que solo funcionará para esa instalación. Revisamos el archivo jar y usamos taskdef para cargar el archivo jar para que no se convierta en otro paso para los desarrolladores cuando inician el equipo o se mueven a una computadora nueva.

Acabo de hacer esto trabajando para mí mismo. Me tomó una hora ugh de todos modos,

Paso 1: descarga la tarea ant-antlr3 desde

http://www.antlr.org/share/1169924912745/antlr3- task.zip

Paso 2: copia a donde la hormiga pueda verlo. Mi mac:

sudo cp /usr/local/lib/ant-antlr3.jar / usr / share / ant / lib /

mi caja de linux:

sudo cp /tmp/ant-antlr3.jar /usr/local/apache-ant-1.8.1/lib/

Paso 3: asegúrese de que antlr2, antlr3, ST estén en classpath. Todo en uno está aquí:

http://antlr.org/download/antlr-3.3-complete.jar

Paso 4: usar en build.xml

<path id="classpath">
    <pathelement location="${antlr3.jar}"/>
    <pathelement location="${ant-antlr3.jar}"/>
</path>

<target name="antlr" depends="init">
    <antlr:ant-antlr3 xmlns:antlr="antlib:org/apache/tools/ant/antlr"
        target="src/T.g"
        outputdirectory="build">
        <classpath refid="classpath"/>
    </antlr:ant-antlr3>
</target>

Acaba de agregar una entrada de preguntas frecuentes:

http://www.antlr.org/wiki/pages/ viewpage.action? pageId = 24805671

La forma más básica de ejecutar Antlr es ejecutar el JAR de Antlr:

<project default="antlr">
  <target name="antlr">
    <java jar="antlr-4.1-complete.jar" fork="true">
      <arg value="grammar.g4"/>
    </java>
  </target>
</project>

Esto es un poco más lento, ya que divide la JVM y ejecuta Antlr incluso si la gramática no cambia. Pero funciona de la misma manera con todas las versiones de Antlr y no necesita ningún objetivo especial.

En Ubuntu, esto debería hacer que esté disponible:

sudo apt-get install ant-opcional

Información adicional sobre lo que todos los demás han contribuido hasta ahora:

El paquete ant-opcional en Ubuntu incluye la tarea incluida con Ant 1.8.2, que es una tarea para ANTLR 2.7.2, por lo que fallará con un error como se describe en esta publicación . El método descrito por Terence es la mejor manera de usar la tarea ANTLR3.

Si no tiene acceso de root en una máquina con Linux, puede instalar el archivo ant-antlr3.jar en el directorio de usuarios de Ant: ~ / .ant / lib . Verifique con ant-diagnósticos si ant-antlr3.jar es visible para Ant, como se explica en en esta otra publicación .

Si está utilizando Eclipse, deberá reiniciar el IDE antes de que reconozca la nueva tarea y también deberá incluir antlr3.jar y stringtemplate.jar en su ruta de clase (pero ant-antlr3.jar no es necesario).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top