[antlr-interest] [v2 to v3][C++/C] throw C++ exception from parser/tree parser.
Ruslan Zasukhin
ruslan_zasukhin at valentina-db.com
Wed Sep 7 06:35:11 PDT 2011
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" <jimi at 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]
More information about the antlr-interest
mailing list