【问题标题】:Where do I get the Antlr Ant task?我从哪里获得 Antlr Ant 任务?
【发布时间】:2014-01-22 18:48:39
【问题描述】:

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

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

【问题讨论】:

    标签: ant antlr parsing


    【解决方案1】:

    当前的 Antlr-task jar 可以在 http://www.antlr.org/share/1169924912745/antlr3-task.zip 获得

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我只是为自己工作。花了我一个小时。啊。无论如何,

        第 1 步:从

        下载 ant-antlr3 任务

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

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

        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

        第四步:在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

        【讨论】:

        • @ceving:只需下载 4.1(或新的 4.2 快照)并放入您的路径。请参阅下面的答案。
        【解决方案4】:

        运行 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 版本的工作方式相同,并且不需要任何特殊目标。

        【讨论】:

          【解决方案5】:

          在 Ubuntu 上应该可以使用它:

          sudo apt-get install ant-optional

          【讨论】:

            【解决方案6】:

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

            Ubuntu 中的ant-optional 包包含 Ant 1.8.2 附带的任务,该任务是 ANTLR 2.7.2 的任务,因此这将失败并出现in this post 所述的错误。 Terence 所描述的方法是使用 ANTLR3 任务的最佳方式。

            如果您在 Linux 机器上没有 root 访问权限,您可以将 ant-antlr3.jar 文件安装在 Ant 用户目录中:~/.ant/lib。检查ant -diagnostics ant-antlr3.jar 是否对Ant 可见,如in this other post 所述。

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

            【讨论】:

              猜你喜欢
              • 2014-10-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-12-30
              • 2012-01-21
              • 2012-07-13
              • 2011-04-11
              • 1970-01-01
              相关资源
              最近更新 更多