4

我试图在我的 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

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

但这些似乎都没有任务定义。(我也试过把这些罐子放在我的 Ant 类路径中;同样的问题。)

4

6 回答 6

4

当前的 Antlr-task jar 位于http://www.antlr.org/share/1169924912745/antlr3-task.zip

它可以在antlr.org网站的“文件共享”标题下找到。

于 2008-08-25T00:11:09.850 回答
2

您应该使用 antlrall.jar jar。您可以继续并将其放入您的 Ant 安装中,但这确实意味着它仅适用于该安装。我们将 jar 签入并使用 taskdef 加载 jar 文件,这样它就不会成为开发人员在团队开始或迁移到新计算机时的另一个步骤。

于 2008-08-25T00:12:09.630 回答
2

我只是让这个为自己工作。花了我一个小时。啊。反正,

第 1 步:从下载 ant-antlr3 任务

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

第二步:复制到蚂蚁可以看到的地方。我的电脑:

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

于 2010-12-23T02:42:44.747 回答
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 版本的工作方式相同,不需要任何特殊目标。

于 2014-01-22T10:48:39.150 回答
0

在 Ubuntu 上,这应该使它可用:

sudo apt-get install ant-optional

于 2011-06-14T22:04:20.670 回答
0

迄今为止其他人贡献的附加信息:

Ubuntu 中的ant-optional软件包包括 Ant 1.8.2 附带的任务,这是 ANTLR 2.7.2 的任务,因此这将失败并出现本文所述的错误。Terence 描述的方法是使用 ANTLR3 任务的最佳方法。

如果您在 Linux 机器上没有 root 访问权限,则可以在 Ant 用户目录中安装 ant-antlr3.jar 文件:~/.ant/lib. 检查ant -diagnosticsant-antlr3.jar 是否对 Ant 可见,如另一篇文章中所述。

如果您使用的是 Eclipse,则需要在 IDE 识别新任务之前重新启动它,并且您还需要在类路径中包含antlr3.jarstringtemplate.jar(但ant-antlr3.jar不是必需的)。

于 2012-05-04T21:22:53.570 回答