如何为ANTLR指定一个目标包?

如果我打电话:

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

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

有没有一种方法来指定目标包?

ANTLR提供了一个头文件工具,允许你包含包和导入。 你可以在你的* .g语法文件中join:

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

一个老问题,答案非常好,但是因为对这个问题的评论问了一个命令行选项(当我到达这里的时候,这就是我实际上正在寻找的东西),所以我想我只是叮叮当当地说下面的内容…

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

这里是一个例子:

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

请参阅ANTLR工具命令行选项中的-package选项以获取更多信息。