Domanda

Sto provando a chiamare un'attività Antlr nel mio Ant build.xml come segue:

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

Ma Ant non riesce a trovare la definizione dell'attività.Ho inserito tutto quanto segue dir.lib.build:

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

Ma nessuno di questi sembra avere la definizione del compito.(Ho anche provato a mettere quei barattoli nel mio classpath Ant;stesso problema.)

È stato utile?

Soluzione

L'attuale jar delle attività Antlr è disponibile all'indirizzo http://www.antlr.org/share/1169924912745/antlr3-task.zip

Può essere trovato su antlr.org sito Web nella sezione "Condivisione file".

Altri suggerimenti

Dovresti usare il jar antlrall.jar.Puoi andare avanti e inserirlo semplicemente nell'installazione di Ant, ma ciò significa che funzionerà solo per quell'installazione.Archiviamo il jar e utilizziamo taskdef per caricare il file jar in modo che non diventi un altro passaggio per gli sviluppatori quando iniziano a far parte del team o passano a un nuovo computer.

Ho appena capito che funziona da solo.Mi ci è voluta un'ora.uff.Comunque,

Passo 1:scarica l'attività ant-antlr3 da

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

Passo 2:copialo dove la formica può vederlo.Il mio Mac:

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

la mia macchina Linux:

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

Passaggio 3:assicurati che antlr2, antlr3, ST siano nel classpath.Tutto in uno è qui:

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

Passaggio 4:utilizzare in 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>

Ho appena aggiunto una voce faq:

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

Il modo più semplice per eseguire Antlr è eseguire Antlr JAR:

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

Questo è un po' più lento, perché esegue il fork della JVM ed esegue Antlr anche se la grammatica non è cambiata.Ma funziona allo stesso modo con ogni versione di Antlr e non necessita di obiettivi speciali.

Su Ubuntu questo dovrebbe renderlo disponibile:

sudo apt-get install ant-optional

Ulteriori informazioni oltre a ciò che tutti gli altri hanno contribuito finora:

IL ant-optional il pacchetto in Ubuntu include l'attività fornita con Ant 1.8.2 che è un'attività per ANTLR 2.7.2, quindi fallirà con un errore come descritto in questo articolo.Il metodo descritto da Terence è il modo migliore per utilizzare l'attività ANTLR3.

Se non disponi dell'accesso root su una macchina Linux, puoi installare il file ant-antlr3.jar nella directory utente Ant: ~/.ant/lib.Controllare con ant -diagnostics se ant-antlr3.jar è visibile ad Ant, come spiegato in quest'altro post.

Se stai utilizzando Eclipse, dovrai riavviare l'IDE prima che riconosca la nuova attività e dovrai anche includere antlr3.jar E stringtemplate.jar nel tuo percorso di classe (ma ant-antlr3.jar non è necessario).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top