ANTLR: как извлечь сообщения об ошибках при сбое сборки

Я построил свой лексер и синтаксический анализатор в ANTLR, и они работают очень хорошо в том смысле, что, когда пользовательский код не может быть проанализирован, он выводит полезные сообщения об ошибках в STDERR, показывая точный номер строки. и Т. Д.

Проблема в том, что мне нужно извлечь эту информацию, чтобы отображать сообщения об ошибках в моем редакторе Eclipse в правильных позициях, но, похоже, она недоступна нигде, кроме STDERR. Я в основном ищу какой-то myParser.getErrorMessages().

Кто-нибудь встречал решение этого?

Я нашел ссылку ниже, однако это работает только в том случае, если пользовательский код частично анализируется (т.е. мы все еще получаем AST). Когда он полностью терпит неудачу, вы не получаете дерево обратно. http://tech.puredanger.com/2007/02/01/recovering-line-and-column-numbers-in-your-antlr-ast/

Я также нашел этот точный вопрос в официальном FAQ ANTLR ... но я действительно не понимаю его решения. Может ли кто-нибудь перевести это для меня? Я не использую ни один из классов, на которые он ссылается, и он говорит о версии 4 (которая еще не выпущена). http://www.antlr.org/wiki/display/ANTLR3/Pattern+for+returning+errors+from+ANTLR+in+data+structures%2C+not+STDERR

Мой код выглядит следующим образом:

FileInputStream fis = new FileInputStream("UserCode.txt");
ANTLRInputStream input = new ANTLRInputStream(fis);
MyLexer lexer = new MyLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
MyParser parser = new MyParser(tokens);
CommonTree tree = (CommonTree)parser.flow().getTree();
MyAST ast = new MyAST(tree);

person Tom G    schedule 07.04.2011    source источник
comment
См.: antlr.org/wiki/display/ANTLR3/Error+ отчеты+и+восстановление (не уверен, что примеры полностью совместимы с ANTLR v3.2/v3.3, но если нет, не должно быть слишком много изменений, чтобы заставить его работать)   -  person Bart Kiers    schedule 07.04.2011
comment
Это отвечает на мой вопрос. Спасибо, Барт!   -  person Tom G    schedule 08.04.2011
comment
@Bart, не могли бы вы вывести ответ из комментариев, чтобы этот вопрос не отображался в потоке [antlr] как оставшийся без ответа. Спасибо.   -  person ilyaigpetrov    schedule 13.05.2011


Ответы (1)


См.: http://www.antlr.org/wiki/display/ANTLR3/Error+reporting+and+recovery (не уверен, что примеры полностью совместимы с ANTLR v3.2/v3.3, но если нет, не должно быть слишком много изменений, чтобы он заработал)

person Bart Kiers    schedule 13.05.2011