2008-11-21 2 views
0

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

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

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

ответ

1

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

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

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

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

1

ANTLRWorks создает тестовые классы, которые создают соединение сокетов обратно в ANTLRWorks, поэтому они не могут использоваться с консоли. Вы можете отредактировать созданный тестовый класс, чтобы не использовать параметр отладочного порта (сокет).

Линия для редактирования является:

FormalSpecParser g = new FormalSpecParser(tokens, 49100, null); 

Вы можете изменить его на:

FormalSpecParser g = new FormalSpecParser(tokens, null); 

который использует объект отладки слушателя вместо порта, а «нуль» означает, что вы не давая ему прослушиватель отладки, поэтому вывод отладки игнорируется. Вы можете написать свой собственный отладочный прослушиватель для вывода сообщений на консоль.

Дополнительную информацию см. В документации ANTLR: http://www.antlr.org/api/Java/namespaces.html

Смежные вопросы