[antlr-interest] Problem with Duplicating nodes/trees

Grzegorz Cieslewski cieslewski at hcs.ufl.edu
Fri Feb 8 12:10:06 PST 2008


I did some more testing and found a simpler case that demonstrates the problem

grammar T2;
options {output=AST;}
tokens
{
	TEST;
}
a : b -> ^(TEST b b)
;
b 	:	INT;
c	: 	ID;

ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;

For input "123" I was expecting ^(TEST 123 123) but I get ^(TEST 123).
 It seems to me that this is a bug.


On Feb 8, 2008 10:58 AM, Grzegorz Cieslewski <cieslewski at hcs.ufl.edu> wrote:
> I looked through the code that ANTLR generates.  It seems to me that
> the function
> org.antlr.runtime.tree.RewriteRuleElementStream.next() is not
> following the spec.
> It does not perform duplication correctly when the size()==1.
>
>
>
> On Feb 8, 2008 9:38 AM, Mark Volkmann <r.mark.volkmann at gmail.com> wrote:
> > On Feb 8, 2008 8:00 AM, Grzegorz Cieslewski <cieslewski at hcs.ufl.edu> wrote:
> > > Hello All,
> > >
> > > I have encountered a problem with tree duplication during AST
> > > construction.  I boiled my problem to following grammar.
> > >
> > > grammar T2;
> > > options {output=AST;}
> > > tokens
> > > {
> > >         TEST;
> > > }
> > > a : c (',' c)* b -> ^(TEST c b)+
> > > ;
> > > b       :       INT;
> > > c       :       ID;
> > >
> > > ID : 'a'..'z'+ ;
> > > INT : '0'..'9'+;
> > > WS : (' '|'\n') {$channel=HIDDEN;} ;
> > >
> > > For input like "x, y, z 1", I was expecting to get a tree looking like
> > >  ^(TEST x 1) ^(TEST y 1) ^(TEST z 1),
> > > but the antlr seems not to duplicate the b rule and I get ^(TEST x 1)
> > > ^(TEST y) ^(TEST z).
> > >
> > > Does any one know what am I doing wrong?  Is this a bug or a "feature".
> >
> > Based on section 7.5 of the book, in the subsection titled
> > "Duplicating Nodes and Trees", what you have looks correct. The
> > relevant statement is this.
> >
> > "In a rewrite rule, ANTLR duplicates any element with cardinality one
> > when referenced more than once or encountered more than once because
> > of an EBNF * or + suffice operator."
> >
> > b is your element with a cardinality of one and it is encountered more
> > than once in your rewrite rule with a + operator, but it isn't being
> > duplicated.
> >
> > I tried your grammar in the latest intermediate build and it doesn't
> > work. I hope someone else has an idea why. I think it's possible
> > you've found a bug.
> >
> > --
> > R. Mark Volkmann
> > Object Computing, Inc.
> >
>
>
>
>
> --
> =====================================================
> Grzegorz Cieslewski
> Research Assistant
> High-performance Computing & Simulation (HCS) Research Laboratory
> University of Florida, Dept. of Electrical and Computer Engineering
> 330 Benton Hall, Gainesville, FL, 32611-6200
> Phone: (352) 392-9041
> Email: cieslewski at hcs.ufl.edu
> Web: www.hcs.ufl.edu
> =====================================================
>



-- 
=====================================================
Grzegorz Cieslewski
Research Assistant
High-performance Computing & Simulation (HCS) Research Laboratory
University of Florida, Dept. of Electrical and Computer Engineering
330 Benton Hall, Gainesville, FL, 32611-6200
Phone: (352) 392-9041
Email: cieslewski at hcs.ufl.edu
Web: www.hcs.ufl.edu
=====================================================


More information about the antlr-interest mailing list