Я использую ANTLRWorks для создания грамматик ANTLR. У меня есть допустимая грамматика, а также создаются исходные файлы парсера и лексера. Я также пробовал отлаживать сгенерированный код, и вывод такой, как ожидалось, в выводе отладчика.
Но когда я пытаюсь вызвать класс __Test__, созданный отладчиком, в консоли ничего не появляется. Я правильно настроил путь к классам, так как могу успешно скомпилировать __Test__.java с тем же путем к классам.
В чем будет проблема? Есть ли четкое руководство по написанию и компиляции образца парсера с помощью antlr и antlrworks?




Что вы ожидаете от консоли?
Взгляните на этот проект. Синтаксический анализатор, созданный ANTLRWorks, - здесь. Как видно из зависимостей в ПОМ, вам нужно убедиться, что antlr находится в пути к классам. Затем вы используете синтаксический анализатор, как показано в этот класс.
final DriftLexer lexer = new DriftLexer(new ANTLRInputStream(inputStream));
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final DriftParser parser = new DriftParser(tokens);
parser.file();
Этого должно быть достаточно, чтобы ваш материал тоже заработал.
ANTLRWorks генерирует тестовые классы, которые создают соединение сокета с ANTLRWorks, поэтому их нельзя использовать с консоли. Вы можете отредактировать сгенерированный тестовый класс, чтобы не использовать параметр отладочного порта (соединение сокета).
Строка для редактирования:
FormalSpecParser g = new FormalSpecParser(tokens, 49100, null);
Вы можете изменить его на:
FormalSpecParser g = new FormalSpecParser(tokens, null);
который использует объект прослушивателя отладки вместо порта, а «null» означает, что вы не предоставляете ему прослушиватель отладки, поэтому вывод отладки игнорируется. Вы можете написать свой собственный прослушиватель отладки для вывода сообщений на консоль.
Дополнительную информацию см. В документации ANTLR: http://www.antlr.org/api/Java/namespaces.html