[antlr-interest] Rules with multiple parameters

John Ridgway john.ridgway at trincoll.edu
Tue Nov 6 09:54:15 PST 2007


This is a copy of an earlier message.  I didn't see it on the list  
and saw no responses; so I'm guessing that it never made it to the list:

Consider the following in a grammar with the output=AST option:

methodOrFieldDecl[Tree modifiers, Tree type]
     :	identifier! methodDeclaratorRest[modifiers, type  
$identifier.tree]
     ;

methodDeclaratorRest[Tree modifiers, Tree type, Tree name]

which is a fragment of a Java 1.5 grammar.  The methodDeclaratorRest  
rule takes three parameters, which seems entirely reasonable  
(actually it's totally unreasonable, but Java was not designed for  
parsing...).  In order to pass three arguments to it I have to play  
with the locations of commas in the "call/usage" in order that the  
generated Java is correct.  If I tried to use

   methodDeclaratorRest[modifiers, type, $identifier.tree]

(note the comma after type), I would end up with an extra comma in  
the generated Java.

This is clearly (to me) a bug.  It is likely to be fixed?

Note.  It gets even worse if we want to do something like:

x
     : a! b! c! d[$a $b $c]
     ;

This won't work even with no commas in the given code.  To make it  
work I have to introduce some names:

x
     :   a! bb=b! c! d[$a bb $c]
     ;

probably does work...

Peace
- John



More information about the antlr-interest mailing list