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

时间:2011-11-26 17:27:02

标签: import antlr directory

我正在扩展一个现有的开源项目,该项目在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”。

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

如果您需要更多详细信息,我很乐意提供它们,这是我的主要论文,扩展了一个开源项目,所以我不需要保密。 :)如果不可能,我可以没有它,但我真的想保持原始项目的一致性。

1 个答案:

答案 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目录。)