Question

J'essaie d'appeler une tâche Antlr dans mon Ant build.xml comme suit :

<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>

Mais Ant ne trouve pas la définition de la tâche.J'y ai mis tout ce qui suit dir.lib.build:

  • antlr-3.1.jar
  • antlr-2.7.7.jar
  • antlr-runtime-3.1.jar
  • modèle de chaîne-3.2.jar

Mais aucun d’entre eux ne semble avoir la définition de la tâche.(J'ai également essayé de mettre ces pots dans mon chemin de classe Ant ;même problème.)

Était-ce utile?

La solution

Le pot de tâches Antlr actuel est disponible sur http://www.antlr.org/share/1169924912745/antlr3-task.zip

On peut le trouver sur le antlr.org site Web sous la rubrique « Partage de fichiers ».

Autres conseils

Vous devez utiliser le pot antlrall.jar.Vous pouvez continuer et simplement le déposer dans votre installation Ant, mais cela signifie que cela ne fonctionnera que pour cette seule installation.Nous enregistrons le fichier jar et utilisons taskdef pour charger le fichier jar afin qu'il ne devienne pas une autre étape pour les développeurs lorsqu'ils démarrent dans l'équipe ou passent à un nouvel ordinateur.

Je viens de faire fonctionner ça pour moi.Cela m'a pris une heure.Pouah.de toute façon,

Étape 1:télécharger la tâche ant-antlr3 à partir de

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

Étape 2:copier là où la fourmi peut le voir.Mon mac :

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

ma boîte Linux :

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

Étape 3:assurez-vous que antlr2, antlr3, ST sont dans le chemin de classe.Tout en un, c'est ici :

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

Étape 4:utiliser dans 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>

Je viens d'ajouter une entrée de FAQ :

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

La manière la plus simple d'exécuter Antlr est d'exécuter le JAR Antlr :

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

C'est un peu plus lent, car il forke la JVM et exécute Antlr même si la grammaire n'a pas changé.Mais cela fonctionne de la même manière avec chaque version d'Antlr et ne nécessite aucune cible particulière.

Sur Ubuntu, cela devrait le rendre disponible :

sudo apt-get install ant-optional

Informations supplémentaires en plus de ce que tout le monde a contribué jusqu'à présent :

Le ant-optional Le package dans Ubuntu inclut la tâche livrée avec Ant 1.8.2 qui est une tâche pour ANTLR 2.7.2, cela échouera donc avec une erreur comme décrit dans cet article.La méthode décrite par Terence est la meilleure façon d'utiliser la tâche ANTLR3.

Si vous n'avez pas d'accès root sur une machine Linux, vous pouvez installer le fichier ant-antlr3.jar dans le répertoire utilisateur Ant : ~/.ant/lib.Vérifier avec ant -diagnostics si ant-antlr3.jar est visible par Ant, comme expliqué dans cet autre post.

Si vous utilisez Eclipse, vous devrez redémarrer l'EDI avant qu'il ne reconnaisse la nouvelle tâche et vous devrez également inclure antlr3.jar et stringtemplate.jar dans votre chemin de classe (mais ant-antlr3.jar n'est pas nécessaire).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top