ANTLR项目的build.xml示例?

时间:2011-11-06 19:05:01

标签: ant build antlr

项目的构建过程正在受到影响,除非它变为自动化。

我从最近开始使用ANTLR。 ANT似乎是为此目的而建立的工具。编译,jar和测试...但是为此目的我找到了脚本build.xml的小代码源。

那么你们想为你的antlr项目分享你的模板build.xml(Java任务或ANTLR任务会没问题)吗?谢谢。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

这是我的核心部分,我认为整合得更好一些。我不确定何时添加了ANTLR的-make选项 - 我使用3.2。

  • 它假定语法保存在生成​​的解析器所在的包中。
  • 将生成的源文件与普通源文件分开,以便它们可以clean编辑
  • 仅在语法文件
  • 之前重新生成解析器+词法分析器源
  • 可以一次处理多个语法
  • ant
  • 正确报告了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>

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