[antlr-interest] @rulecatch in a C environment
Pierre Attar
pat at tireme.fr
Wed Apr 9 05:53:25 PDT 2008
Jim,
Thanks a lot for your answer. I've now remove all "after" clauses and
try to work on the displayrecognitionError function.
As you should have notice, I'm not a C guru and trying to do your mind,
I got the following error :
..FFormParser.c(326) : error C2039: 'displayrecognitionError' : is not a
member of 'FFormParser_Ctx_struct'
2> ..\antlrgen\FFormParser.h(317) : see declaration of
'FFormParser_Ctx_struct'
Which means, I assume, that I also need somewhere to declare the my
overwriting function? Can you explain me the way to do that ?
Pierre
Jim Idle a écrit :
> We need to add better support so that targets can tell you whether the section you are using is supported. @after currently isn't officially supported though I have been playing around with it.
>
> Rather than try to do this through things like rule catch, just override the displayRecognitionError routine, or routines tath are called before that is called if you find a need.
>
> At that point you can find out everything you would normally need to know, including what rule/alt the parser was in and the expected token set (if this can be worked out) and so on.
>
> >From the C API docs:
>
> Unless you wish to create your own tree structures using the built in ANTLR AST rewriting
> notation, you will rarely need to override the default implementation of runtime methods. The
> exception to this will be the syntax err reporting method, which is essentially a stub function
> that you will usually want to provide your own implementation for. You should consider the built in function
> displayRecognitionError() as an example of where to start as there can be no really useful
> generic error message display.
>
>
> In your grammar you can do this:
>
> @parser::apifuncs
> {
> // Override the standard error display and install my own.
> // Look at the runtime library code to see what the default one
> // does to find things out, then do what I want in my version.
> ..
> ctx->displayrecognitionError = myDisplayrecognitionError;
> }
>
> Jim
>
>
>> -----Original Message-----
>> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
>> bounces at antlr.org] On Behalf Of Pierre Attar
>> Sent: Tuesday, April 08, 2008 6:14 AM
>> To: antlr-interest at antlr.org
>> Subject: [antlr-interest] @rulecatch in a C environment
>>
>> Hi,
>>
>> I want to catch recognition errors on my parsing. In order to achieve
>> this, I've creating the following rulecatch:
>>
>> @rulecatch {
>> pANTLR3_EXCEPTION exe = EXCEPTION;
>> if(NULL != exe) {
>> char buffer[100];
>> sprintf(buffer, "\%s", exe->name);
>> cout << "Got an exception in parsing recognition: " << buffer;;
>> }
>> }
>>
>> This works fine except that when nothing is provided, the generation is
>> :
>> if (HASEXCEPTION())
>> {PREPORTERROR();
>> PRECOVER(); }
>> else
>> {{resultTree= doc;}}
>>
>> ... where the line is an @after clause.
>>
>>
>> My problem ? As soon as I put my rulecatcher, the after clause is no
>> more generated.
>>
>> I would be very glad to understand what I've done wrong here and also,
>> if someone have a sample I may clone, it would help me.
>>
>> Thanks a lot, Pierre
>>
>>
>>
>>
>
>
>
>
>
>
>
>
More information about the antlr-interest
mailing list