如何为ANTLR指定目标包?

时间:2009-10-31 22:56:45

标签: java antlr

如果我打电话:

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

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

有没有办法指定目标包?

2 个答案:

答案 0 :(得分:59)

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

    }
}

答案 1 :(得分:23)

一个带有完美答案的老问题,但由于对问题的评论要求命令行选项(这就是我到达这里时的实际搜索结果),我以为我只是插话而已说以下......

如果你使用的是ANTLR 4,你可以在命令行中指定包.I checked它似乎不存在于版本3中,所以other答案是ANTLR的方法3.

以下是一个例子:

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

有关详细信息,请参阅ANTLR Tool Command Line Options上的-package选项。