2013-06-21 35 views
2

我的build.xml文件看起來像以下:如何使用ant爲antlr3生成的類添加包聲明?

<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 /包/ ANTLR,這就是我想要的,但生成的文件屬於默認包。我怎樣才能讓com成爲com.package.antlr的一部分?

回答

3

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" /> 
+0

太棒了!非常感謝! –