ANTLR - указание нескольких каталогов для поиска включенных грамматик - PullRequest
4 голосов
/ 26 ноября 2011

Я расширяю существующий проект с открытым исходным кодом, в котором уже есть очень продвинутый Lexer / Parser / TreeParser в ANTLR. Я хотел бы придерживаться текущей структуры каталогов, поэтому я создал свой собственный каталог, в который я хотел бы поместить мои новые (уже написанные) файлы грамматики. Они импортируют эти три исходных файла грамматики, и для компиляции кода я могу использовать java org.antlr.Tool, где я могу указать один каталог для поиска импортированных грамматик с аргументом -lib option.

Моя проблема в том, что эти три оригинальных импортированных файла грамматики сами импортируются и снова в другом каталоге. Чтобы проиллюстрировать (наследование / импорт идут наверх):

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, который, кажется, просто игнорирует каталог2 (а затем пытается скомпилировать его, чего не может сделать, потому что это каталог, а не грамматика ANTLR). Я попытался указать "-lib directory1 -lib directory2", тогда "-lib directory2" просто перезаписывает "-lib directory1".

Это то, что я считаю довольно простой необходимостью указывать несколько каталогов для поиска в любой более сложной системе грамматик, поэтому я уверен, что что-то упустил. Я просто не могу гуглить что-нибудь полезное.

Если вам нужны какие-либо подробности, я с радостью их предоставлю, это мой главный тезис о расширении проекта с открытым исходным кодом, поэтому мне не нужно ничего хранить в секрете. :) Если это невозможно, я могу жить без него, но очень хотелось бы сохранить последовательность оригинального проекта.

1 Ответ

2 голосов
/ 26 ноября 2011

Глядя на источник org.antlr.Tool класса :

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 директорию).

...