[antlr-interest] AntLR C# target exceptions problem

Jan Newger Jan.Newger at rwth-aachen.de
Mon Apr 13 08:08:27 PDT 2009


Johannes Luber wrote:
>> Johannes Luber wrote:
>>> Does putting a breakpoint into the catch block work? Otherwise the menu
>> for exceptions offers the options to break when an exception is thrown and
>> if an exception is caught. Furthermore, did you add a messagebox call or
>> console print to check if the catch block is actually executed (in release
>> mode)? Otherwise I can't check things out myself, as my development machine
>> has a display problem and is thus unusable right now.
>> Putting a breakpoint into the catch block doesn't work. If you look at
>> the code I posted, there actually is a messagebox call, which is never
>> executed (debug or release mode doesn't matter).
>>
>> I noticed however, that when a NoViableAltException is thrown from my
>> generated parser, that the parser itself catches it, calls ReportError
>> then Recover and ultimately returns silently from this method (start
>> symbol of my grammar). So in fact the exception is swallowed by the
>> parser itself. Is this "by design"? I just didn't expect this kind of
>> behavior, because it seems to be quite different from the java runtime
>> approach. What would be the solution? Should I override the ReportError
>> method in my parser and rethrow the exception?
> 
> I've never used the error recovery process myself, but I think that you have to overwrite 3 methods. If ReportError() is one of them I don't know but <http://www.antlr.org/wiki/display/ANTLR3/Error+reporting+and+recovery> has some insights. Don't forget to use .NET capitalisation instead the Java one.
> 

Thanks for your quick response, Johannes. Actually, I don't want to
override the error reporting mechanism, I just want the runtime to throw
the respective exceptions when the input is malformed (just in the same
way the java runtime does it).
Is the behavior I previously described considered a bug or is this "by
design"? It seems odd to me that exceptions are swallowed within the
parser itself. So even if I where to replace the error reporting
mechanism, I would change the error message of an exception which never
reaches my code in the first place. IMHO this is ether a serious bug or
I'm doing something incredibly stupid here.

Cheers
Jan


More information about the antlr-interest mailing list