Dear all
I translated the "ANSI C grammar for ANTLR v3" from the grammar list
(http://antlr.org/grammar/list) from Java to C.
The original is here: http://antlr.org/grammar/1153358328744/C.g
My new C one can be found here: http://mtsystems.ch/tmp/C.g
Diff: http://mtsystems.ch/tmp/grammar-diff.txt
Since I'm not at all familiar with the internals of the Java or C
frontends, I don't know how good a job I did. Specifically, I have three
questions/concerns:
1. I think my translation is not fully correct since I manually have to
add a "!= NULL" check in the created CParser.c. This change:
{
- if ($declaration.size()>0&&$declaration::isTypedef) {
- $Symbols::types.add($IDENTIFIER.text);
- //System.out.println("define type
"+$IDENTIFIER.text);
+ if($declaration->size($declaration) > 0 &&
$declaration::isTypedef) {
+ $Symbols::types->put($Symbols::types,
$IDENTIFIER.text->chars, 1,
NULL);
+ //fprintf(stderr, "define type \%s\n",
$IDENTIFIER.text->chars);
}
}
creates this code:
if(ctx->SCOPE_STACK(declaration)->size(ctx->SCOPE_STACK(declaration)) >
0 && (SCOPE_TOP(declaration))->isTypedef) ...
And I have to manually adapt it to (additional "SCOPE_TOP(declaration)
!= NULL"):
if(ctx->SCOPE_STACK(declaration)->size(ctx->SCOPE_STACK(declaration)) >
0 && SCOPE_TOP(declaration) != NULL &&
(SCOPE_TOP(declaration))->isTypedef) ...
2.
The Java implementation uses a set. Since the C frontend doesn't have
this data structure, I'm using a hash table (pANTLR3_HASH_TABLE). But I
think this is ok unless I missed something obvious.
3.
I'm not yet freeing the allocated hash tables. Where/how could I do
this? Or will it be done automatically on
psr->free(psr);
tstream->free(tstream);
lxr->free(lxr);
input->close(input);
I would be very happy about feedback on this three points. If someone
with deeper insights than me would take a look at the whole change, that
would also be great.
Thanks
Marco
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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/il-antlr-interest?hl=en
-~----------~----~----~----~------~----~------~--~---