[antlr-interest] Problems with semantic predicates

Haralambi Haralambiev hharalambiev at gmail.com
Fri Apr 18 05:12:10 PDT 2008


Hello,

Is there a way to lure Ter's interest to answer whether this braces (sorry
for the mistake ;-) ) functionality is in place?

I am using the latest version, 3.0.1, that is downloadable from the site, so
I guess it's not implemented :-(

Hari

On 4/18/08, Johannes Luber <jaluber at gmx.de> wrote:
>
> Haralambi Haralambiev schrieb:
>
> > Hi Johannes,
> >
> > I don't understand what's the benefit of the two brackets.
> >
> > When I write {{$r::flag = false;}} the code that ANTLR produces is
> > "{((r_scope)r_stack.peek()).flag = false;}", i.e. the brackets are added
> > also, but they are still in "if (backtracking == 0)" statement, which is the
> > check I want to skip somehow.
> >
> > Hari
> >
>
> The two braces (brackets are "[]") should be the syntax which enables an
> action to be executed always, even during backtracking. But either you are
> using an too old version of ANTLR or Ter didn't implement this variant after
> all.
>
> Johannes
>
> >
> > On 4/17/08, *Johannes Luber* <jaluber at gmx.de <mailto:jaluber at gmx.de>>
> > wrote:
> >
> >    Haralambi Haralambiev schrieb:
> >
> >        Hello Johannes,
> >
> >        So, if I understand correctly, you suggest to have the following
> >        (using a scope):
> >
> >        r2
> >        : {$r::flag}? Token1 -> ^(NODE Token1)
> >        | Token1
> >        ;
> >
> >        If the above is a correct assumption, then how can I set the
> >        scope variable, as I could only think of the following way:
> >
> >        r
> >        scope {
> >         boolean flag;
> >        }
> >        : Token1^ Token2!
> >           {$r::flag = true;}    r2
> >        | Token1^
> >         {$r::flag = false;}
> >         r2
> >        ;
> >
> >        This solution, however, will fail, as the action for setting the
> >        scope variable will not be executed until the backtracking is
> >        over. But I need this variable set, as it will be used as a
> >        predicate for the parsing. Thus, we have a catch-22 situation.
> >
> >        A solution I could think of is not to have two alternatives for
> >        r2, but rather construct the CommonTree manually with java code
> >        and within to use the knowledge of the boolean flag. But I
> >        dislike this solution and am open to suggestions.
> >
> >
> >    Try using {{$r::flag = true;}}.
> >
> >    Johannes
> >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20080418/b428c75a/attachment.html 


More information about the antlr-interest mailing list