[antlr-interest] [C target] About disable recovery ... [Solution?]

Jim Idle jimi at temporal-wave.com
Fri Oct 21 09:52:55 PDT 2011


If you read through the source code, you would have seen that you did not
need to do this.

Jim

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Ruslan Zasukhin
> Sent: Friday, October 21, 2011 1:24 AM
> To: antlr-interest at antlr.org
> Subject: [antlr-interest] [C target] About disable recovery ...
> [Solution?]
>
> Hi All,
>
> I want describe for archive of this list solution which I have found
> after 3 days learning issue.
>
> So ... Story is.
>
> 1) I have read book ... Here info only for Java ... Overrite this.
> Catch exception.. But in C no exception, so it is clear I must find
> info for C.
>
> 2) I jump to site -> docs -> C target   ===>  NOTHING ?
>     but should be info + example here, because C target
>     differs from Java. No exceptions.
>
> 3) I start search list archive... Nothing useful except last letter
> from guy, which note that C comment says we must override
> mismatchRecover(), But there is no such function, probably it was
> renamed to
> recoverFromMismatchedToken()
>
>
> 4) Okay, I try override this function in MY ,cpp file.
> But... Ops.  mismatch() function,  is STATIC, so I cannot link to it
> from my sourcs.
>
> Jim have suggest copy to my sources mismatch() also, Okay I try that
> and ... It even not compiles, because mismatch() calls other
> static funcs ...
>
> Dirty force then:  I make it in the antlr3baserecognizer.c
>
> Compiles links ...  HAPPY -> start do tests  ....
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> And I see that for example such SQL query with error
>
>     "DRO TABLE T1"
>
> Still do 3 iterations ...
>
> Debugging shows me that I even do not get into
> recoverFromMismatchedToken() Oops again...
>
> After some debugging, I have note, that each rule, always calls
> recover(), and exactly this method clears error flag.
>
> So I do next attempt:  I make own simple recover()
>
> void vdb_recover_off( pANTLR3_BASE_RECOGNIZER recognizer ) {
>     return;
> }
>
>
> And replace default in the parser:
>
> @parser::apifuncs
> {
>     // Install custom error message display
>     //
>     RECOGNIZER->displayRecognitionError = vdb_BuildRecognitionErrorStr;
>     RECOGNIZER->recover = vdb_recover_off;
>
>
>
> And finally !!!!    It works as I want that ...
> Parser builds error string and stops right on the first work  DRO.
>
> I will write also now separate letter to Terrence and Jim, where I will
> try explain why such simple thing as
>         option RECOVER = FALSE
>
> Should not take 3 days from users of ANTLR :)
>
> I hope this letter will save time to future C users of ANTRL.
>
>
> ===================
> P.S.
>
> Also while I did learn this recover dances on ANTLR, And read that we
> must override recoverFromMismatchedToken() I have asked self:
>
> here exists yet
>     recoverFromMismatchedSet(),
>     recoverFromMismatchedElement
>     recover()
>
>
> Why only ONE that function should be overriden?
>
> I think in Docs, Books, Comments, this should be explained also in
> clean way. Right?
>
>
> --
> Best regards,
>
> Ruslan Zasukhin
> VP Engineering and New Technology
> Paradigma Software, Inc
>
> Valentina - Joining Worlds of Information http://www.paradigmasoft.com
>
> [I feel the need: the need for speed]
>
>
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-
> email-address


More information about the antlr-interest mailing list