[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