Я построил свой лексер и синтаксический анализатор в 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);