Tomasz Jastrzebski wrote:
> But this creates a different tree, while what I need is plain and simple
> structure like this:
> +
> / \
> / \
> a *
> / \
> / \
> c d
No, it does exactly what the one you provided does. The output rule is
only observed if the subrule matches, otherwise it follows the default.
It is identical in effect to the rule you provided...
additiveExpression
: e1=multiplicativeExpression ((o='+'|o='-')
e2=multiplicativeExpression ->
BINARY_EXPRESSION<BinaryExpression>[$o.text, $e1.tree, $e2.tree])?
;
(I've corrected where it should be a question mark, not * - * would
accept chained expressions, but the tree rewrite would be awkward)
If the subrule matches, the rewrite (which I don't quite understand)
applies. If it doesn't, then the default (just emit the token as a
single node) takes place.
Your grammar doesn't appear to support expressions like
3 + 4 - 5
or
2 * 3 / 5
Sam
> --- On *Fri, 8/7/09, Sam Barnett-Cormack
> /<[email protected]>/* wrote:
>
>
> From: Sam Barnett-Cormack <[email protected]>
> Subject: Re: [antlr-interest] could not even do k=1 for decision xx;
> reason: timed out
> To: "Tomasz Jastrzebski" <[email protected]>
> Date: Friday, August 7, 2009, 2:30 PM
>
> Tomasz Jastrzebski wrote:
>
> > But the problem is that I cannot do that since I need to catch
> reference to each expression and operator to build nice AST tree.
> The real code looks more like this:
> > additiveExpression
> > : e1=multiplicativeExpression (o='+' | o='-')
> e2=multiplicativeExpression ->
> BINARY_EXPRESSION<BinaryExpression>[$o.text, $e1.tree, $e2.tree]
> > | multiplicativeExpression
> > ;
>
> Still left-factor it.
>
> additiveExpression
> : e1=multiplicativeExpression ((o='+'|o='-')
> e2=multiplicativeExpression ->
> BINARY_EXPRESSION<BinaryExpression>[$o.text, $e1.tree, $e2.tree])*
> ;
>
> This means that the output expression is only considered if the
> optional subrule matches - otherwise it uses the default output
> (just e1).
>
> -- Sam Barnett-Cormack
>
>
--
Sam Barnett-Cormack
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"il-antlr-interest" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/il-antlr-interest?hl=en
-~----------~----~----~----~------~----~------~--~---