[antlr-interest] [C target] Duplicating tree error

Jim Idle jimi at temporal-wave.com
Thu Jan 21 06:47:57 PST 2010


Well, you are rewriting the tree with ^(....)+ but the tree grammar only walks one declaration ^(...). Unless you are using the + higher up the rule chain.

Example is:

... e+=entity_decl (COMMA e+=entity_decl)* ...
 -> ^(X .... $e)+

Also, your rewrite rule loses the label. 

It is generally a good idea to break components up in to separate rules when rewriting as then the token boundaries of nodes are correctly set. So here, you would move label? In to a higher rule for instance.

Jim

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Þðóøêèí Ìèõàèë
> Sent: Thursday, January 21, 2010 3:57 AM
> To: Gavin Lambert; antlr-interest at antlr.org
> Subject: Re: [antlr-interest] [C target] Duplicating tree error
> 
> Excuse me, what you mean behind "you need to use a label"? Could you
> send
> me
> example?
> 
> And, currently, I haven't seen problems with duplicating of
> "entity_decl"
> tree.
> I have a fault with a coping of "declaration_type_spec" tree.
> 
> 
> Gavin Lambert <antlr at mirality.co.nz> писал(а) в своём письме Thu, 21
> Jan
> 2010 14:42:01 +0300:
> 
> > At 00:21 22/01/2010, =?koi8-r?B?4NLV28vJziDtycjBycw=?= wrote:
> >  >type_declaration_stmt
> >  >   : label? declaration_type_spec ( (T_COMMA  attr_spec )*
> >  >T_COLON_COLON )?
> >  >     entity_decl (T_COMMA entity_decl)* end_of_stmt
> >  >     -> ^(T_TYPE_DECLARATION_STMT declaration_type_spec attr_spec*
> >  >entity_decl)+
> >  >   ;
> > [...]
> >  >BUT declaration_type_spec subtree isn't dublicated (only the root
> >  >of subtree).
> >  >
> >  >Where is mistake?
> >
> > IIRC, when you use a rule name in a rewrite rule, it represents "the
> > first unused instance of this rule in the input" (which is why
> > entity_decl is doing what it is).  So the second and subsequent times
> it
> > appears (during the + loop) the value is empty since it didn't occur
> any
> > more times in the input.  To duplicate nodes you need to use a label.
> >
> >
> > __________ Information from ESET Smart Security, version of virus
> > signature database 4792 (20100121) __________
> >
> > The message was checked by ESET Smart Security.
> >
> > http://www.esetnod32.ru
> >
> >
> >
> 
> 
> --
> Best regards,
> Michael
> 
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-
> email-address





More information about the antlr-interest mailing list