2008-08-25 144 views
4

我試圖調用ANTLR的任務在我的Ant build.xml如下:我從哪裏獲得Antlr Ant任務?

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

但是螞蟻無法找到任務定義。我已經把所有在dir.lib.build如下:

  • ANTLR-3.1.jar
  • ANTLR-2.7.7.jar
  • ANTLR運行時,3.1.jar
  • StringTemplate的-3.2。罐子

但是沒有一個似乎有任務定義。 (我也嘗試把這些瓶子在我的Ant classpath中;同樣的問題)

回答

2

我剛剛得到這個工作了我自己。花了我一個小時。啊。反正,

第1步:從

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

步驟2下載螞蟻antlr3任務:複製到螞蟻可以看到它。我的Mac:

須藤CP /usr/local/lib/ant-antlr3.jar在/ usr /共享/螞蟻/ lib中/

我的Linux機器:

須藤CP的/ tmp/ANT-antlr3 .jar /usr/local/apache-ant-1.8.1/lib/

第3步:確保antlr2,antlr3,ST在類路徑中。 All in one的是在這裏:

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

第4步:在建使用。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> 

只是增加了一個FAQ條目:

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

+0

ANTLR 4.1怎麼樣? – ceving 2014-01-22 10:12:44

0

在Ubuntu這應該使其可用:

sudo apt-get install ant-optional

0

對別人都做出了貢獻,從而頂端其他信息遠:

Ubuntu中的ant-optional軟件包包含隨Ant 1.8.2一起提供的任務,該任務是ANTLR 2.7.2的任務,因此將失敗,並顯示如in this post所述的錯誤。 Terence描述的方法是使用ANTLR3任務的最佳方法。

如果您在Linux計算機上沒有root訪問權限,則可以在ant用戶目錄中安裝ant-antlr3.jar文件:~/.ant/lib。請諮詢ant -diagnostics ant是否可以看到ant-antlr3.jar,如in this other post所述。

如果您使用的是Eclipse,你會需要它承認,在新的任務,你還需要在你的classpath antlr3.jarstringtemplate.jar(但ant-antlr3.jar是沒有必要),以重新啓動IDE。

1

最基本的方式來運行ANTLR的是執行ANTLR的JAR:

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

這是一個有點慢,因爲它叉JVM和運行ANTLR的,即使語法沒有改變。但它與每個Antlr版本都以相同的方式工作,並且不需要任何特殊目標。