Компиляция файлов классов, сгенерированных ANTLRWorks

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

Но когда я пытаюсь вызвать класс __Test__, созданный отладчиком, в консоли ничего не появляется. Я правильно настроил путь к классам, так как могу успешно скомпилировать __Test__.java с тем же путем к классам.

В чем будет проблема? Есть ли четкое руководство по написанию и компиляции образца парсера с помощью antlr и antlrworks?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
1 213
2

Ответы 2

Что вы ожидаете от консоли?

Взгляните на этот проект. Синтаксический анализатор, созданный 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

Другие вопросы по теме