我正在扩展一个现有的开源项目,该项目在ANTLR中已经有一个非常先进的Lexer / Parser / TreeParser。我想坚持当前的目录结构,所以我创建了自己的目录,我想把我的新(已经写好的)语法文件。他们正在导入这三个原始语法文件并编译代码,我可以使用java org.antlr.Tool,在那里我可以使用-lib选项参数指定一个目录来搜索导入的语法。
我的问题是这三个原始导入的语法文件本身有一些导入,并且在不同的目录中也有。为了说明(继承/导入到顶部):
Abstract syntax directory: lexer parser tree parser
Original syntax directory: lexer parser tree parser
My new syntax directory: lexer parser tree parser
这是层次结构。我遇到的麻烦是如何在命令行上使用-lib选项一次指定“抽象语法目录”和“原始语法目录”,以便ANTLR工具(或任何其他允许我编译语法导入的解决方案)具有给定目录结构的原始文件)。
我尝试了-lib directory1 directory2,它似乎忽略了directory2(然后尝试编译它,它不能,因为它是一个目录,而不是ANTLR语法)。我尝试指定“-lib directory1 -lib directory2”,“-lib directory2”只会覆盖“-lib directory1”。
我认为在任何更复杂的语法系统中,指定要搜索的多个目录是相当基本的需要,因此我确信我错过了一些东西。我只是不能谷歌任何有用的东西。
如果您需要更多详细信息,我很乐意提供它们,这是我的主要论文,扩展了一个开源项目,所以我不需要保密。 :)如果不可能,我可以没有它,但我真的想保持原始项目的一致性。
答案 0 :(得分:1)
查看the source of the org.antlr.Tool
class:
else if (args[i].equals("-lib")) {
if (i + 1 >= args.length) {
System.err.println("missing library directory with -lib option; ignoring");
}
else {
i++;
libDirectory = args[i];
if (libDirectory.endsWith("/") || libDirectory.endsWith("\\")) {
libDirectory = libDirectory.substring(0,libDirectory.length()-1);
}
File outDir = new File(libDirectory);
if (!outDir.exists()) {
ErrorManager.error(ErrorManager.MSG_DIR_NOT_FOUND,libDirectory);
libDirectory = ".";
}
}
}
只显示一个-lib
目录。
我假设您的(隐含)问题在此得到解答(不可能指向超过1个-lib
目录。)