ANTLR - 指定多个目录搜索包含的语法

问题描述:

我正在扩展一个现有的开源项目,该项目在ANTLR中已经有一个非常先进的Lexer/Parser/TreeParser。我想坚持当前的目录结构,所以我创建了我自己的目录,我想将我的新(已写入)语法文件。他们正在导入这三个原始语法文件并编译代码,我可以使用java org.antlr.Tool,我可以在其中指定一个目录以使用-lib选项参数搜索导入的语法。ANTLR - 指定多个目录搜索包含的语法

我的问题是,这三个原始导入的语法文件有一些导入本身,并再次在不同的目录。为了说明(继承/导入最高层):

Abstract syntax directory: lexer   parser   tree parser 
Original syntax directory: lexer   parser   tree parser 
My new syntax directory: lexer   parser   tree parser 

这是层次结构。我遇到的麻烦是如何在ANTLR工具的命令行上使用-lib选项同时指定“抽象语法目录”和“原始语法目录”(或任何其他允许我编译我的语法导入的解决方案具有给定目录结构的原始文件)。

我试过-lib directory1 directory2,它似乎忽略了directory2(然后试图编译它,它不能,因为它是一个目录,而不是ANTLR语法)。我试过指定“-lib directory1 -lib directory2”,然后“-lib directory2”刚刚覆盖“-lib directory1”。

这是我相信一个相当基本的需要指定多个目录搜索,在任何更复杂的语法系统,因此我相信我错过了什么。我只是不能谷歌任何有用的东西。

如果您需要更多的细节,我很乐意为您提供,这是我的硕士论文扩展了一个开源项目,所以我不需要保守任何秘密。 :)如果不可能,我可以没有它,但真的想保持原始项目的一致性。

看着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目录)。

+0

谢谢巴特。我对此非常不满,似乎对于更复杂的语法来说非常基本,但我可以应付。无论如何,这个问题肯定得到了回答(除非有另一种方式去做--lib参数)。 –