Образец build.xml для проекта ANTLR? - PullRequest
2 голосов
/ 06 ноября 2011

Процесс построения проекта страдает, если он не становится автоматическим.

Я начал работать с ANTLR с недавнего времени.ANT, кажется, является самым строительным инструментом для этой цели.Компилировать, jar и тестировать ... Но я нашел для этого небольшой источник кода скрипта build.xml.

Итак, вы, ребята, хотели бы поделиться вашим шаблоном build.xml для вашего проекта antlr (подойдет либо задача Java, либо задача ANTLR)?Благодарю.

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

Это примерно то, что я использую:

<?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 голосов
/ 01 августа 2013

Вот мои основные части, которые, я думаю, объединяют немного лучше. Я не уверен, когда была добавлена ​​опция ANTLR -make - я использую 3.2.

  • Предполагается, что грамматики хранятся в пакетах, куда будут отправляться их сгенерированные парсеры.
  • Хранит сгенерированные исходные файлы отдельно от обычных исходных файлов, чтобы они могли быть clean ed
  • Регенерирует источники парсера + лексера, только если они старше файла грамматики
  • несколько грамматик могут быть обработаны за один проход
  • ANTLR об ошибках сообщается правильно ant

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

Вы также можете посмотреть на Как использовать муравья с ANTLR3 .

...