[antlr-interest] LastElement treatment...

Niclas Hedhman niclas at hedhman.org
Fri Oct 10 02:37:41 PDT 2008


Gang,

I am totally newbie to ANTLR and forgive me if this is a FAQ (I have
been search a lot for an answer).

In principle, I want to do;

Syntax being
 a.b.c.d -> e.f.g.h

translated to

 e.getF().getG.setH( a.getB().getC().getD() );

I have no problems with any of it, except the "setH()" part. In my AST, I have

^(MEMBER_DECLARATION member_reference
{
// removed for clarity
}
)

member_reference returns [StringTemplate member]
    : member
    {
    // a lot of stuff
    };

but if I change the AST rule to

member_reference returns [StringTemplate member]
    : (member
    {
    // a lot of stuff
    })*;

member_reference returns [StringTemplate member]
    : (member
    {
        // a lot of stuff
    })*
    member
    {
        // special last element handling
    }
    ;

I get an error;
" member is a non-unique reference"


How is one supposed to make such distinction??


Cheers
Niclas


More information about the antlr-interest mailing list