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
-~----------~----~----~----~------~----~------~--~---

Reply via email to