2

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

BoolExprLexer.java と BoolExprParser.java をフォルダー /src/com/package/antlr に生成しますが、これは私が望むものですが、生成されたファイルはデフォルトのパッケージに属します。com.package.antlr の一部にするにはどうすればよいですか?

4

1 に答える 1

3

アントラー3

レクサー文法またはパーサー文法の場合、文法ファイルに次を追加します。

@header {
    package com.package.antlr;
}

結合された文法 (同じ文法ファイル内のレクサーとパーサー) の場合は、文法ファイルに次を追加します。

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

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

アントラー4

文法からレクサー/パーサーを生成するときに、次の引数を ANTLR ツールに渡します。

-package com.package.antlr

これは、次の 2 行をビルド スクリプトに追加することで、Ant ビルド中に実行できます。

    <arg value="-package"/>
    <arg value="com.package.antlr" />
于 2013-06-21T17:04:55.473 に答える