Hi Terrence, Hi Jim, First of all again: thank you for great job and product(s), Please do not take below my text as complains, but mainly as explanation where C++ developer get problems with ANTLR3 and why ... And some suggestions how this can be may be improved. Long letter but should be easy to read :-)
=================================== So ... in ANTLR2 it was very simple to handle errors from box: it throws exception, few lines of code with catch() -> DONE. All our db engine expects exceptions from ANTLR v2/v3 and its wrapper code. Two days I am reading reading reading ... I have found 2-3 such questions from C++ developers: if we can throw from my displayError()? Answer from Jim was like this: > On 1/15/09 8:23 PM, "Jim Idle" <j...@temporal-wave.com> wrote: > >> You can probably use them carefully, but as you point out, you have to >> be careful with memory. The runtime tracks all its normal memory >> allocations so as long as you close the 'classes' correctly you should >> generally be OK. However, you should make sure that throwing exceptions >> does not bypass the normal rule clean up, such as resetting error and >> backtracking flags and so on, Okay, but I'd expect to see more details (x5 - x10 times more text and code example) at this section http://www.antlr.org/api/C/index.html * what is known TODAY? at 2011 ? Can we throw here C++ exc? don't this break logic of C code of parsers? True working example * EXAMPLE? I have open folder Examples/C and made search on "exception". Found only in the JAVA files, used for tests of parser. There is no example for C++ exceptions. There is no example with override displayRecognitionError() * Or look on this code-example. http://www.antlr.org/api/C/index.html The only here ERROR-related line is if (psr->pParser->rec->errorCount > 0) Then silent ... And questions come to mind ** So, if not throw() exceptions, then after tree-parser, I check if there was any errors and IF they was ... What next ??? I have read that C target builds LIST of exception objects, But where is TEXT and example how navigate that list? ** and if I will throw error from displayRecognitionError() then such check of counter is useless ... ========================================== Okay, next ... There is good helpful pages ANTLR2 to ANTLR3 ... Great! But this page mainly about grammar and Java. And zero info here to help existed C++ developers port their ANTLR2 products. Hmm. ================ Also when I watch default displayRecognitionError() from .c with many points, which do print to stderr as: ----------------------- void displayRecognitionError( pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_UINT8* tokenNames ) { ... ANTLR3_FPRINTF(stderr, "-end of input-("); ------------------------ I wonder, why not provide here same function, which do sprintf() into string buffer, and TWO very small wrapper-functions, which get this string and 1) print it to stderr as now; 2) throw it as c++ exception; //------------------------------------------------------ pANTLR3_STRING buildRecognitionError( pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_UINT8* tokenNames ) { ............ return resStr; } //------------------------------------------------------ void displayRecognitionError_stderr( pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_UINT8* tokenNames ) { pANTLR3_STRING res = buildRecognitionError( recognizer, tokenNames ); ANTLR3_FPRINTF( stderr, res ); } //------------------------------------------------------ void displayRecognitionError_throw( pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_UINT8* tokenNames ) { pANTLR3_STRING res = buildRecognitionError( recognizer, tokenNames ); throw SomeException( res ); } Yes, not big deal may be, but will simplify usage of ANTLR3 from box. I could read in ANTLR 3.5: just install displayRecognitionError_throw, and your parser will start throw C++ exceptions. 30 seconds deal, instead of two days and still in doubts ... -- 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 -- You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to il-antlr-inter...@googlegroups.com. To unsubscribe from this group, send email to il-antlr-interest+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en.