[antlr-interest] translating Java frontend code to C frontend code

Marco Trudel marco at mtsystems.ch
Wed Aug 26 02:01:57 PDT 2009


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


More information about the antlr-interest mailing list