50

如果我打电话:

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

...使用 antlr-3.1.3 解析器和词法分析器代码将在目录中生成outdir/sources/com/example。但是生成的类没有任何package声明。我需要他们在包里生活com.example

有没有办法指定目标包?

4

2 回答 2

74

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

    }
}
于 2009-10-31T23:32:10.947 回答
28

一个有着完美答案的老问题,但由于对该问题的评论要求提供命令行选项(这就是我到达这里时实际搜索的内容),我想我只是插话并说以下内容...

如果您使用的是 ANTLR 4,则可以在命令行上指定包。我检查过,它似乎在版本 3 中不存在,所以另一个答案是使用 ANTLR 3 的方法。

这是一个例子:

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

有关详细信息,请参阅ANTLR 工具命令行选项-package中的选项。

于 2014-10-13T13:07:32.250 回答