Terence Parr <parrt <at> cs.usfca.edu> writes:
> 
> Hi all. Yep, I put ^ and ! suffix operators into ANTLR in about '93.   
> Makes building ASTs really easy for things like expressions.  Note  
> that turning on AST construction with no operators builds a linked  
> list (flat tree) of entire input; very convenient.
> 
> Here's an example.  This builds proper ASTs for additive expressions:
> 
> add : atom ('+'^ atom)* ;
> 

How does ^ work in the above context? Does it root the tree at the
'+' with all child atoms? The following is a pictorial explanation of 
my automatic reduction rule as well as my non-excludable and raise 
children operator.

Given the grammar:

Atom
    : -<number>    /* note: this is a non-excludable */
    ;

Additive
    : ^Additive '+' Atom
    : Atom
    ;

And the sequence of tokens: 1 + 2 + 3, the untransformed parse tree 
appears as:

                   Additive
                  /    |   \
           Additive    +    Atom
          /    |   \          |
   Additive    +    Atom      3
       |              |
     Atom             2
       |
       1

The automatic reductions raise up the numbers in place of the Atom 
as follows, and the '+' tokens are dropped as they are excludable:

                   Additive
                  /        \
           Additive         3
          /        \ 
   Additive         2
       |
       1

And finally the ^ raises the children of the two lower Additives up 
into the root Additive:

   Additive
   |  |  |
   1  2  3

The actual process does not involve distinct phase, this is all simply 
done as the parse tree is being built. Terrence, does the ^ operator 
in ANTLR work in a similar fashion?

--

Best Regards,
Peter Goodman.
http://ioreader.com



_______________________________________________
PEG mailing list
PEG@lists.csail.mit.edu
https://lists.csail.mit.edu/mailman/listinfo/peg

Reply via email to