如何让蚂蚁把一个包指令放在几个源文件中?

How to make ant put a package directive in several source files?

我正在使用 Antlr4 构建解析器,我正在使用 Netbeans 作为 IDE 和 ant 作为构建系统。 Ant 运行 Antlr,它在项目的 src/ 目录中生成 parser.javalexer.java

它们都需要一个包指令,所以我必须手动添加它。

有没有办法用 Ant 为目录中的所有源文件添加一行文本?或者还有其他解决方案吗? (也许使用 Antlr?)

您可以使用 antlr4 命令行的 -o 选项和语法中的 @header{...} 的组合:

  • -o 允许您指定将生成所有输出的输出目录,

  • @header{...} 会将您编写的代码插入 {..} 作为生成的代码头,这样您就可以将包声明放入此块中。

例如:

grammar myGrammar;

@header {
    package my.package;
}
...

如果您不想将语法绑定到特定语言,可以使用 -package 选项(允许您为生成的文件指定包或命名空间)并从中删除包声明您的 @header{...} 代码。

有一个奇怪的警告,其中 @header {...} 在组合词法分析器+解析器的语法中有效。但是,对于单独的词法分析器和解析器语法文件,每个文件都必须将 header 声明为

@lexer::header { ... }
// or 
@parser::header { ... }

否则只有解析器会添加 header(注意事项)。

此外,正如 Vincent 所提到的,有一个命令行选项,但同样需要注意。