[antlr-interest] Modifying tree based on semantic content

Steve Ebersole steve at hibernate.org
Fri May 15 04:57:40 PDT 2009


On Fri, 2009-05-15 at 07:34 -0400, David Jameson wrote:
> I was not aware of this kind of construction. Thank you for bringing  
> it to my attention.  Where is there an article that specifically  
> discusses this mechanism? I couldn't find it in my ANTLR book nor  
> through (a few) google searches?
> 
> In other words, what exactly is "areStrings(...)" --- is it just a  
> function that returns boolean? I'm assuming that the syntax here  
> implies that you can have a sequence of these
>      -> { .... }   TREE
> lines and that ANTRL looks for the first expression in braces that is  
> "true"
Here specifically I would assume that areStrings(...) would be a grammar
member function so that the types of the 'a' and 'b' expressions could
be determined.  But in general yes, the fragment inside {} just needs to
evaluate to a boolean value.  I believe these are called rewrite
predicates(?).  And yes, just like regular predicates you can list
multiples and the first match will "win".

> Is that correct?
> 
> D
> 
> 
> On May 15, 2009, at 7:26 AM, Steve Ebersole wrote:
> 
> > someRule
> >    : a PLUS b
> >        -> { areStrings($a.tree,$b.tree) } ^(CONCATENATE a b)
> >        -> ^(PLUS a b)
> >
> > On Thu, 2009-05-14 at 23:38 -0400, David Jameson wrote:
> >> Is there any way to control the built-in tree generation (from an
> >> initial parse phase) based on semantics of what is being parsed?
> >>
> >> As a simple example,    if   I see the expression
> >>        a + b
> >>
> >> then I want to produce
> >>     (PLUS a b)
> >> or
> >>    (CONCATENATE a b)
> >>
> >> depending on whether a and b are numeric or string.
> >>
> >>
> >> How can I do this with rewrite rules (for example)?   Or do I have to
> >> construct my own trees?
> >>
> >>
> >> Thanks,
> >> D
> >>
> >> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> >> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
> > -- 
> > Steve Ebersole <steve at hibernate.org>
> > Hibernate.org
> >
> 
> 
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
-- 
Steve Ebersole <steve at hibernate.org>
Hibernate.org



More information about the antlr-interest mailing list