[antlr-interest] A basic question about AST construction operators

Hitesh Shetty hitesh.p.shetty at gmail.com
Mon Aug 9 09:11:06 PDT 2010


Hi,

Im a newbie ANTLR user and I had a basic question about the AST construction
operator '^' caret,
When the AST construction operator '^' (caret) is used along with a normal
rule such as
   condStatement : 'expression' ^ x=statement1 (y=statement2)? ;
The term 'expression' becomes the root for the tree and the next un-suffixed
element i.e $x becomes the first child and $y becomes the second child. This
can be rewritten as ^('expression' $x $y?).
However when the operator '^' is used along with a subrule such as
   expr : x=INT ('+' ^ y=INT)* ;
The $x is chosen as the first child not the next unsuffixed element i.e $y.
For example input 1+2 is parsed as ^('+' 1 2) and not as ^('+' 2 1)
Am I missing something obvious or Is this the behaviour of the AST
construction operator ?
Any pointers would be greatly appreciated.


More information about the antlr-interest mailing list