ant - 如何使用ant为antlr3生成的类添加包声明?

标签 ant antlr antlr3

我的 build.xml 如下所示:

<property name="lib" value="${basedir}/lib" />
<property name="src" value="${basedir}/src" />
<property name="package" value="com/package/antlr" />

<path id="compile.classpath">
    <fileset dir="${lib}">
        <include name="antlr-3.5-complete.jar" />
    </fileset>
</path>

<!-- Check if ANTLR3 can be found in the classpath -->
<target name="antlr_classpath">

    <whichresource property="antlr.in.classpath" class="org.antlr.Tool">
        <classpath>
            <path refid="compile.classpath" />
        </classpath>
    </whichresource>
    <fail message="ANTLR3 not found in CLASSPATH">
        <condition>
            <not>
                <isset property="antlr.in.classpath" />
            </not>
        </condition>
    </fail>
    <echo>ANTLR3 found via CLASSPATH</echo>
</target> 


<!-- Antlr3 is called here -->

<target name="antlr" depends="antlr_classpath">
    <java classname="org.antlr.Tool" fork="true" failonerror="true">
        <classpath>
            <path refid="compile.classpath" />
        </classpath>
        <arg value="-verbose" />
        <arg value="-make"/>
        <arg value="-o" />
        <arg path="${src}/${package}" />
        <arg path="${src}/${package}/BoolExpr.g" />
    </java>
</target>

它在文件夹/src/com/package/antlr 中生成 BoolExprLexer.java 和 BoolExprParser.java ,这就是我想要的,但生成的文件属于默认包。我怎样才能使它们成为 com.package.antlr 的一部分?

最佳答案

ANTLR 3

对于词法分析器语法或解析器语法,请将以下内容添加到语法文件中:

@header {
    package com.package.antlr;
}

对于组合语法(词法分析器和解析器位于同一语法文件中),请将以下内容添加到语法文件中:

@lexer::header {
    package com.package.antlr;
}

@parser::header {
    package com.package.antlr;
}

ANTLR 4

当您从语法生成词法分析器/解析器时,将以下参数传递给 ANTLR 工具:

-package com.package.antlr

这可以在 Ant 构建期间通过将以下两行添加到构建脚本中来完成:

    <arg value="-package"/>
    <arg value="com.package.antlr" />

关于ant - 如何使用ant为antlr3生成的类添加包声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240652/

相关文章:

eclipse - ant 脚本中私有(private)目标和公共(public)目标的区别

java - 有条件地排除 Ivy 的某些依赖关系

css - Antlr v4 中良好的 CSS 语法

java - 在 Gradle 构建中兼顾 Scala、Antlr 和 Java

java - 解析antlr3中的mixfix表达式

Eclipse:如何将项目源文件和ant build.xml与Eclipse工作区分开?

java - Ant:如何安装编译的程序(FOP 1.0)

java - Antlr 语义谓词

compiler-construction - ANTLR 3 的两级语法

c - ANTLR:意想不到的角色