Mat*_*hut 5 directory import antlr
我正在扩展一个现有的开源项目,该项目在 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
Run Code Online (Sandbox Code Playgroud)
这就是层次结构。我遇到的问题是如何使用 ANTLR 工具的命令行上的 -lib 选项(或任何其他允许我编译语法导入的解决方案)同时指定“抽象语法目录”和“原始语法目录”具有给定目录结构的原始文件)。
我试过 -lib directory1 directory2,它似乎忽略了 directory2(然后尝试编译它,它不能,因为它是一个目录,而不是 ANTLR 语法)。我尝试指定“-lib directory1 -lib directory2”,然后“-lib directory2”只是覆盖“-lib directory1”。
这是我认为在任何更复杂的语法系统中指定要搜索的多个目录的相当基本的需要,因此我确定我错过了一些东西。我只是无法谷歌任何有用的东西。
如果您需要更多详细信息,我很乐意提供它们,这是我扩展开源项目的硕士论文,因此我不需要保密。:) 如果不可能,我可以没有它,但真的很想保持原始项目的一致性。
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 = ".";
}
}
}
Run Code Online (Sandbox Code Playgroud)
看起来只有一个-lib目录正在被读取。
我假设您的(隐含的)问题已得到解答(不可能指向超过 1 个-lib目录)。