[antlr-interest] Problems with semantic predicates

Haralambi Haralambiev hharalambiev at gmail.com
Fri Apr 18 00:10:19 PDT 2008


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

On 4/17/08, Johannes Luber <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/fba573e4/attachment.html 


More information about the antlr-interest mailing list