我正在尝试在Ant build.xml中调用Antlr任务,如下所示:
<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>
但Ant无法找到任务定义。我在dir.lib.build
:
但这些似乎都没有任务定义。 (我也尝试将这些jar放在我的Ant类路径中;同样的问题。)
答案 0 :(得分:4)
目前的Antlr-task jar可在http://www.antlr.org/share/1169924912745/antlr3-task.zip
获得可以在antlr.org网站的“文件共享”标题下找到它。
答案 1 :(得分:2)
你应该使用antlrall.jar jar。您可以继续将其放入Ant安装中,但这确实意味着它只适用于那个安装。我们检查jar并使用taskdef加载jar文件,这样当开发人员开始团队或移动到新计算机时,它不会成为开发人员的另一个步骤。
答案 2 :(得分:2)
我刚才为自己工作了。花了我一个小时。啊。反正
第1步:从
下载ant-antlr3任务http://www.antlr.org/share/1169924912745/antlr3-task.zip
第2步:复制到ant可以看到的地方。我的mac:
sudo cp /usr/local/lib/ant-antlr3.jar / usr / share / ant / lib /
我的linux盒子:
sudo cp /tmp/ant-antlr3.jar /usr/local/apache-ant-1.8.1/lib /
步骤3:确保antlr2,antlr3,ST在类路径中。一切都在这里:
http://antlr.org/download/antlr-3.3-complete.jar
第4步:在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>
刚刚添加了常见问题解答条目:
http://www.antlr.org/wiki/pages/viewpage.action?pageId=24805671
答案 3 :(得分: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版本的工作方式相同,不需要任何特殊目标。
答案 4 :(得分:0)
在Ubuntu上,这应该可以使用:
sudo apt-get install ant-optional
答案 5 :(得分: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,则需要在识别新任务之前重新启动IDE,并且还需要在类路径中包含antlr3.jar
和stringtemplate.jar
(但ant-antlr3.jar
没有必要)。