Let me be more specific. In the v4 prerelease stuff, Tool.java has
// http://antlr.org/depot/antlr4/main/tool/src/org/antlr/v4/Tool.java public void error(Message msg) { if ( listeners.size()==0 ) { defaultListener.error(msg); return; } for (ANTLRToolListener l : listeners) l.error(msg); } using http://antlr.org/depot/antlr4/main/tool/src/org/antlr/v4/tool/ANTLRToolListener.java then in http://antlr.org/depot/antlr4/main/tool/src/org/antlr/v4/parse/ToolANTLRParser.java I do: public void displayRecognitionError(String[] tokenNames, RecognitionException e) { String msg = getParserErrorMessage(this, e); if ( paraphrases.size()>0 ) { String paraphrase = (String)paraphrases.peek(); msg = msg+" while "+paraphrase; } // List stack = getRuleInvocationStack(e, this.getClass().getName()); // msg += ", rule stack = "+stack; tool.errMgr.syntaxError(ErrorType.SYNTAX_ERROR, getSourceName(), e.token, e, msg); } which forces all msgs from antlr to shunt to Tool.error(), which announces to listeners. For testing, i have unit tests use this http://antlr.org/depot/antlr4/main/tool/test/org/antlr/v4/test/ErrorQueue.java as a listener to the tool like so: Tool antlr = newTool(optionsA); antlr.addListener(equeue); Ter On Nov 30, 2010, at 5:20 PM, Terence Parr wrote: > Check ANTLRToolListener in antlr source or whatever. it has a similar problem > to solve. > Ter > On Nov 30, 2010, at 5:13 PM, Arthur Goldberg wrote: > >> Hello All >> >> My ANTLR parser is embedded in other code. I've decided that reporting >> errors out of the parser would be better handled as a list of errors, >> not exceptions, so that the parse is allowed to recover from errors and >> complete, if possible. >> Does anyone have a working pattern for returning errors from ANTLR in a >> list, not STDERR? >> In more detail, I'd run it in two modes: >> 1) testing: call some rule other than the root >> In this case, I will let the rule report an error via an exception. >> >> 2) production: call the root rule >> In this case, a newReportError() in >> >> catch (RecognitionException re) { >> newReportError(re); >> recover(input,re); >> } >> >> would catch exceptions thrown by other rules, and store them in a list. >> When the root rule returns, it returns the list of errors, along with >> the results of the parse. >> >> If someone can help me with this, I'll make it worth your while. I'm >> running out of time for messing with ANTLR. >> >> Thanks >> Arthur >> >> >> List: http://www.antlr.org/mailman/listinfo/antlr-interest >> Unsubscribe: >> http://www.antlr.org/mailman/options/antlr-interest/your-email-address > > > List: http://www.antlr.org/mailman/listinfo/antlr-interest > Unsubscribe: > http://www.antlr.org/mailman/options/antlr-interest/your-email-address List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address -- You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en.
