[antlr-interest] Unexpected behavior while using += in a tree grammar

Luis Pureza pureza at gmail.com
Sat Jan 9 09:03:33 PST 2010


I've started using antlr a few days ago, so let me begin by thanking
everyone that contributed for creating this fantastic project.

Unfortunately, I think I ran into a bug and I'm hoping you might help me.

I'm using a tree grammar where I have the following rule:

expr returns [Expr value]
   | ID                                                { $value = new
Var($ID.text); }
   | ^(APP fn=expr (args+=expr)+ { $value = new App($fn.value, $args); }

Surprisingly, $args is a list of CommonTrees, and not a list of Expr
as I was hoping it would be. Is this a bug or a feature? If it's the
latter, is there any way to "convert" the tree into an Expr?

For now, I'm collecting args manually, with the following workaround:

expr returns [Expr value]
@init {
 List<Expr> ops = new ArrayList<Expr>();
   | ^(APP fn=expr (op=expr { ops.add($op.value); })+) { ... }
   | ID
                   { ... }


Luís Pureza

More information about the antlr-interest mailing list