如何为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
选项以获取更多信息。