[antlr-interest] FYI Duplicate Nodes Behavior

Bastian Asam bastian.asam at amadeus.com
Thu Feb 17 03:55:57 PST 2011


Hello everybody,
I just spend almost a day to figure out a difference on how ANTLR handles 
the duplication of nodes and thought it might be helpful to others.

What I was trying to do is rather simple:

dup : 'test =' refs -> ^('test' refs refs) ;
refs : id(',' id)* ;
id : ID ;

That generates with input "test = test1,test2" this tree: ^('test' id 
test1 test2 ^(nil test1 test2))

Why is there a nil node generated?

My solution to this is to put the refs definition in the dup definition:
dup : 'test =' (i+=id(',' i+=id)*) -> ^('test' $i* $i*) ;       // don't 
forget the * !!
id : ID ;

Is not particularly beautiful, but works :)

Output is now
^('test' id test1 test2 test1 test2)

Hope this helps someone...
Bastian



IMPORTANT  -  CONFIDENTIALITY  NOTICE  - This e-mail is intended only for 
the use of the individual or entity shown above as addressees. It may 
contain information which is privileged, confidential or otherwise 
protected from disclosure under applicable laws.  If the reader of this 
transmission is not the intended recipient, you are hereby notified that 
any dissemination, printing, distribution, copying, disclosure or the 
taking of any action in reliance on the contents of this information is 
strictly prohibited.  If you have received this transmission in error, 
please immediately notify us by reply e-mail or using the address below 
and delete the message and any attachments from your system. 

Amadeus Data Processing GmbH 
Geschäftsführer: Eberhard Haag 
Sitz der Gesellschaft: Erding 
HR München 48 199 
Berghamer Strasse 6 
85435 Erding 
Germany


More information about the antlr-interest mailing list