[antlr-interest] Access to lexer warning/error messages after parsing
Miguel Marques
mig.marques at gmail.com
Tue Jul 1 13:43:08 PDT 2008
Hy,
I'm writing an eclipse plugin so I need the errors.
public void displayRecognitionError(String[] tokenNames,
RecognitionException e){
if(errorHandler!=null){
this.register(errorHandler, e, this.getErrorMessage(e,
this.getTokenNames()));
} else{
String hdr = getErrorHeader(e);
String msg = getErrorMessage(e, tokenNames);
emitErrorMessage(hdr+" "+msg);
}
}
I've overriden the displayRecognitionError in both the Parser and
Lexer classes. My handler does all the work, I register the exception
that has all the information on the error and then process it.
miguel
>
> On 2008/07/01, at 18:02, Andy Tripp wrote:
>
>> Jim,
>>
>> As you point out, the default case is that people will want to
>> process their own error messages,
>> rather than have ANTLR send them to stderr. So doesn't it make more
>> sense to
>> have ANTLR package them into a data structure (which has a
>> toString() method
>> which ANTLR calls and sends to stderr? The alternative is that people
>> have to either parse the error text or look at the ANTLR-generated
>> code to
>> understand how to override the default behavior.
>>
>> You mention reusing your error handling mechanism across "virtually
>> all" your
>> grammars. I think that for almost ANTLR users, the number of lexer/
>> parsers that they're
>> going to write is exactly 1. Better to make it as easy as possible
>> to write that
>> first grammar and not assume that they're going to be creating more
>> grammars
>> anyway. Part of making it easy is to make it possible to build a
>> lexer/parser
>> as a "black box", without having to ever look at the ANTLR-
>> generated code.
>>
>> Andy
>>
>>
>> Jim Idle wrote:
>>> On Tue, 2008-07-01 at 08:54 +0200, Raphael Reitzig wrote:
>>>> Hi!
>>>>
>>>> I second that for I am about to write something quite similar.
>>>> System.err
>>>> is no good in a user oriented GUI application.
>>>>
>>>> I can think of two possibilties to integrate such behaviour in
>>>> ANTLR:
>>>> * grammar option like "warnMode", i.e. with values "console" and
>>>> "collect".
>>>> I'd like to have _one_ exceptions thrown if there ocurred any
>>>> error while
>>>> parsing.
>>>> * possibility to set output stream for error messages via grammar
>>>> option:
>>>> @errors { System.err } (default)
>>>> Implementation of either should be no obstacle (*guess*).
>>> In the case of lexers, it is best to build a lexer that almost
>>> cannot throw errors as once you lex incorrectly then there isn't
>>> much you can do. Having rules in the lexer that catch known common
>>> mistakes and/or catch any character that makes no sense in your
>>> lexer means that your whole solution will be more robust. For most
>>> lexers,. just having:
>>> BADCHAR: . {insert your error code};
>>> As the last rule will improve things.
>>> However, in the case of lexer, parser and tree parser it is
>>> trivial to override the error output method and add your errors to
>>> collections/a collection. As the standard error messages are
>>> usually of no use to a real application (and they cannot be, there
>>> are too many things you might wish to do on error), then you will
>>> almost certainly want to implement your own error output anyway.
>>> Just add the message to a collection. I do this with virtually
>>> every recognizer I write and it takes less time than learning some
>>> new syntax and access methods for ANTLR (which everyone will then
>>> complain about because they don't do exactly what they had in
>>> mind. ;-)
>>> So, the method that is called has all the information that you
>>> could need, but YOU have to make it in to a collection, format it
>>> in a way that makes sense for your application, and present the
>>> errors to your users. There is no generic solution that would
>>> provide much more than a different set of questions than there is
>>> right now. Sure, the errors could all be collected as objects that
>>> you then iterate, but then there is more code for people to rip
>>> out when they don't want that!
>>> Come on guys the error messages are an afternoons coding that you
>>> can probably reuse on related projects (if they are living in the
>>> same environment.) I last did this in C# and if it took an hour to
>>> get it all together I would be surprised. You only need to learn
>>> the ANTLR bit once.
>>> Jim
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20080701/5d2253f0/attachment.html
More information about the antlr-interest
mailing list