[antlr-interest] Gated semantic predicates in C tree walker causing exceptions

Kieran Simpson kierans777 at gmail.com
Tue Apr 10 18:13:55 PDT 2012


Looking at that the Java code that is generated for the same grammar, 
again a FailedPredicateException is thrown if the gated semantic 
predicate is false

if ( !((continueProcessingBlock)) ) {
     throw new FailedPredicateException(input, "myTreeRule", 
"continueProcessingBlock");
}

According to the Antlr book (and 
http://stackoverflow.com/questions/3056441/what-is-a-semantic-predicate-in-antlr) 
gated semantic predicates shouldn't throw exceptions.

The caveat however is what I've read deals with parsers (something that 
produces an AST) not a tree walker/grammar so perhaps gated semantic 
predicates are treated differently.

Cheers,

On 23/07/64 5:59 AM, Kieran Simpson wrote:
> For my tree grammar, I've come across the situation where I want to
> ignore the rest of the subtree we're currently in as well as any
> subtrees of the current tree.
>
> As part of the rule, a variable continueProcessingBlock can get set to
> false, and the actions for parts of the rule check the boolean before
> taking action.
>
> When it comes to the part of the rule where I want to descend into child
> trees, I was wanting to use a gated semantic predicate to decide whether
> or not to as in the example below:
>
> myTreeRule
> @init {
> bool continueProcessingBlock = true;
> }
> :
> // .... matcher rules for nodes in the tree
> // can set continueProcessingBlock to false
>
> // Do we descend into subtrees?
> ({continueProcessingBlock}?=> myTreeRule*)
> ;
>
> However the C code generated "throws" a FailedPredicateException. It was
> my understanding that a gated semantic predicate is evaluated and if the
> result is false, then the walker moves on as opposed to a semantic
> predicate (non gated?) which would throw the FailedPredicateException.
>
> Is this a bug, or a misunderstanding on my part? Is there a better way
> to achieve the outcome?
>
> Cheers,
>
>


More information about the antlr-interest mailing list