2011-11-06 2 views
2

Le processus de construction d'un projet souffre, à moins qu'il ne devienne automatique.Un exemple de build.xml pour le projet ANTLR?

J'ai commencé avec ANTLR depuis peu. ANT semble être l'outil de construction même à cet effet. Compile, jar, et teste ... Mais j'ai trouvé peu de source de code du script build.xml dans ce but.

Alors vous voudriez partager votre template build.xml pour votre projet antlr (la tâche Java ou la tâche ANTLR ira)? Merci.

Répondre

3

C'est à peu près ce que j'utilise:

<?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

Très utile. Merci Bart! – zell

+0

De rien @zell. –

0

est ici les pièces principales de la mienne, que je pense intègre un peu mieux. Je ne suis pas sûr quand l'option -make d'ANTLR a été ajoutée - j'utilise 3.2.

  • Il suppose que les grammaires sont conservées dans les paquetages où vont partir les parseurs générés.
  • Keeps fichiers source générés séparément des fichiers source normale afin qu'ils puissent être clean ed
  • régénère uniquement les sources d'analyseur + analyseurs lexicaux quand ils sont plus âgés que le fichier de grammaire
  • plusieurs grammaires peuvent être traitées en une seule passe
  • ANTLR erreurs sont signalées correctement par la fourmi

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

Vous pouvez également consulter un t How to use ant with ANTLR3.

Questions connexes