2011-11-06 64 views
2

项目的建设过程正在受到影响,除非它自动化。ANTLR项目的build.xml示例?

我从最近就开始使用ANTLR。 ANT似乎是用于此目的的非常建筑工具。编译,jar和测试......但我已经找到了脚本build.xml的代码来源。

所以你们想分享你的antlr项目的模板build.xml(Java任务或ANTLR任务都可以)?谢谢。

回答

3

这大致就是我使用:

<?xml version="1.0" encoding="UTF-8"?> 

<project name="YourProject"> 

    <property name="main.package" value="yourproject"/> 
    <property name="parser.package" value="${main.package}/parser"/> 
    <property name="main.src.dir" value="src/main"/> 
    <property name="test.src.dir" value="src/test"/> 
    <property name="grammar.src.dir" value="src/grammar"/> 
    <property name="grammar.file" value="${grammar.src.dir}/YourGrammar.g"/> 
    <property name="build.dir"  value="build"/> 
    <property name="classes.dir"  value="${build.dir}/classes"/> 
    <property name="main.build.dir" value="${classes.dir}/main"/> 
    <property name="test.build.dir" value="${classes.dir}/test"/> 

    <path id="classpath"> 
     <pathelement location="${main.src.dir}"/> 
     <pathelement location="${test.src.dir}"/> 
     <pathelement location="${main.build.dir}"/> 
     <pathelement location="${test.build.dir}"/> 

     <!-- the ANTLR jar is in the lib directory, of course --> 
     <fileset dir="lib"> 
       <include name="*.jar"/> 
     </fileset> 
    </path> 

    <!-- init target --> 

    <target name="compile" depends="init" description="Compiles all source files."> 
     <javac srcdir="${main.src.dir}" destdir="${main.build.dir}" includeantruntime="false"> 
      <classpath refid="classpath"/> 
     </javac> 
     <javac srcdir="${test.src.dir}" destdir="${test.build.dir}" includeantruntime="false"> 
      <classpath refid="classpath"/> 
     </javac> 
    </target> 

    <target name="generate" depends="init" description="Generates the lexer and parser from the .g grammar file."> 
     <echo>Generating the lexer and parser...</echo> 
     <java classname="org.antlr.Tool" fork="true" failonerror="true"> 
      <arg value="-fo"/> 
      <arg value="${main.src.dir}/${parser.package}"/> 
      <arg value="${grammar.file}"/> 
      <classpath refid="classpath"/> 
     </java> 

     <!-- 
      compile the generated parser and lexer source file to see 
      if there's no illegal code inside these source files 
     --> 
     <antcall target="compile"/> 
    </target> 

    <!-- other targets --> 

</project> 
+0

非常有帮助。谢谢巴特! – zell

+0

不客气@zell。 –

0

这里是我的核心件,我认为整合好一点。我不确定何时添加ANTLR的-make选项 - 我正在使用3.2。

  • 它假定语法保存在生成​​的解析器将要发送的包中。
  • 保持生成的源文件从正常源文件分开,以便它们可以是clean
  • 只有再生解析器+词法源时它们比语法文件
  • 多个语法可以在单次通过被处理的年龄较大的
  • ANTLR错误都是由蚁正确报告

<project name="MyProject"> 
    <property name="lib.antlr" value="lib/antlr-3.2.jar" /> 

    <property name="src.dir" value="${user.dir}" /> 
    <property name="src.java" value="${src.dir}/java" /> 
    <property name="build.dir" value="build" /> 
    <property name="build.src" value="${build.dir}/src" /> 
    <property name="build.classes" value="${build.dir}/classes" /> 

    <path id="compile.class.path"> 
     <pathelement location="${build.classes}" /> 
     <fileset dir="lib"> 
      <include name="**/*.jar" /> 
     </fileset> 
    </path> 

    <target name="clean"> 
     <delete dir="${build.dir}" /> 
     <delete dir="${reports.dir}" /> 
    </target> 

    <target name="generate" description="Generate parsers from ANTLR grammars"> 
     <mkdir dir="${build.src}" /> 
     <java jar="${lib.antlr}" fork="true" dir="${src.java}" failonerror="true"> 
      <arg value="-verbose" /> 
      <arg value="-make" /> 
      <arg value="-o" /> 
      <arg path="${build.src}" /> 
      <arg value="com/example/io/Foo.g" /> 
      <arg value="com/example/text/Bar.g" /> 
     </java> 

    </target> 

    <target name="compile" depends="generate"> 
     <property name="javac.debug" value="on" /> 
     <mkdir dir="${build.dir}" /> 
     <mkdir dir="${build.classes}" /> 
     <javac destdir="${build.classes}" source="1.6" target="1.6" includeantruntime="false" debuglevel="lines,vars,source"> 
      <src path="${src.java}" /> 
      <src path="${build.src}" /> 
      <include name="com/example/**/*.java" /> 
      <classpath refid="compile.class.path"/> 
     </javac> 
    </target> 
</project> 

您还可以查看一t How to use ant with ANTLR3