[antlr-interest] Problems with semantic predicates

Johannes Luber jaluber at gmx.de
Fri Apr 18 04:14:06 PDT 2008


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
> 
> 



More information about the antlr-interest mailing list