ANTLR: как извлечь сообщения об ошибках при сбое сборки - PullRequest
0 голосов
/ 07 апреля 2011

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

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

Кто-нибудь сталкивался с решением этой проблемы?

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

Я также нашел этот точный вопрос в официальном FAQ ANTLR ... но я действительно не понимаю его решения. Кто-нибудь может перевести это для меня? Я не использую ни один из классов, на которые он ссылается, и он говорит о v4 (который еще не выпущен). 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);

1 Ответ

1 голос
/ 13 мая 2011

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

...