Компиляция сгенерированных файлов классов ANTLRWorks - PullRequest
0 голосов
/ 21 ноября 2008

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

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

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

Ответы [ 2 ]

1 голос
/ 01 мая 2010

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

1 голос
/ 03 декабря 2008

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

Посмотрите на этот проект . Сгенерированный парсер ANTLRWorks здесь . Как вы можете видеть из зависимостей в POM , вы должны убедиться, что antlr находится в пути к классам. Затем вы используете парсер, как показано в этот класс .

final DriftLexer lexer = new DriftLexer(new ANTLRInputStream(inputStream));
final CommonTokenStream tokens = new CommonTokenStream(lexer);        
final DriftParser parser = new DriftParser(tokens);
parser.file();

Этого должно быть достаточно, чтобы все заработало.

...