[antlr-interest] @rulecatch in a C environment
Pierre Attar
pat at tireme.fr
Wed Apr 9 09:03:29 PDT 2008
Jim,
I've tried this right capitalization before, this morning in France,
and it does not works too :
.. FFormParser.c(326) : error C2039: 'displayRecognitionError' : is not
a member of 'FFormParser_Ctx_struct'
..FFormParser.h(317) : see declaration of 'FFormParser_Ctx_struct'
Any other idea ?
Pierre
Jim Idle a écrit :
> Pierre,
>
> The capitalization is wrong, it is:
>
> displayRecognitionError
>
> Jim
>
>
>> -----Original Message-----
>> From: Pierre Attar [mailto:pat at tireme.fr]
>> Sent: Wednesday, April 09, 2008 5:53 AM
>> To: Jim Idle
>> Cc: antlr-interest at antlr.org
>> Subject: Re: [antlr-interest] @rulecatch in a C environment
>>
>> 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