Подтвердить что ты не робот

Как указать целевой пакет для ANTLR?

Если я вызываю:

java org.antlr.Tool -o outdir sources/com/example/Java5.g

... с antlr-3.1.3 код синтаксического анализатора и лексера будет сгенерирован в каталоге outdir/sources/com/example. Но сгенерированные классы не имеют оператора package. Я нуждаюсь в них в жизни в пакете com.example.

Можно ли указать целевой пакет?

4b9b3361

Ответ 1

ANTLR предоставляет инструмент заголовка, который позволяет вам включать пакет и импорт. Вы включаете это в свой файл грамматики *.g:

@header {
    package org.xmlcml.cml.converters.antlr;
    import java.util.HashMap;
}

И вам это может понадобиться и в Lexer:

@lexer::header {package org.xmlcml.cml.converters.antlr;}

и если вам нужно добавить некоторые элементы и код:

@members {
    HashMap<String, Object> objectMap = new HashMap<String, Object>();
    //...

    private void addArrayValue(String content) {
    //... code required by snippets in the grammar

    }
}

Ответ 2

Старый вопрос с отличным ответом, но поскольку в комментарии к вопросу был задан вариант командной строки (и именно это я и искал, когда я сюда попал), я думал, что просто перезвоню и скажите следующее...

Вы можете указать пакет в командной строке, если вы используете ANTLR 4. Я проверен и кажется, что он не существует в версии 3, так что другой ответ - это путь для ANTLR 3.

Вот пример:

java -cp antlr-4.4-complete.jar org.antlr.v4.Tool -package my.package MyGram.g4

Дополнительную информацию см. в разделе -package в ANTLR Tool Параметры командной строки.