[antlr-interest] Guarded Predicates
Terence Parr
parrt at jguru.com
Fri Dec 13 10:33:11 PST 2002
Yeah, I have a note to look into this...are you using Java output?
Does it look like ANTLR generates something for the guard?
Ter
On Friday, December 13, 2002, at 06:42 AM, David Wigg wrote:
> Guarded predicates do not appear to do what I expected from them
> as described in the ANTLR documentation (which seemed sensible
> and intuitively correct).
>
> It says the following;
>
> ANTLR provides a guarded predicate to allow you to specify the
> lookahead context under which a predicate should be evaluated.
> The syntax is:
>
> (lookahead-context-for-predicate)=>{predicate}?
>
> A guarded predicate is useful in situations where the semantic
> predicate should be hoisted into the prediction decision only
> when the lookahead is consistent with some context. For example:
>
> a : (ID)=>{isType(LT(1))}? (ID|INT)
> | ID
> ;
>
> Here, the predicate is only applicable when an ID is found on
> the input stream. It should not be evaluated when an INT is found.
>
>
> So, in the case illustrated above if an INT was next the guarded
> predicate would not be evaluated and parsing would continue
> within the first alternative to (ID|INT).
>
> In fact as far as I can see the effect of the current
> implementation is that unless the predicate is true parsing will
> not fall through to the rest of the alternative anyway.
>
> It's quite simple to put the above rule in a .g file to compile
> it and to examine the resulting generated code.
>
> I find it rather ominous that I have only been able to find any
> examples of guarded predicates in TinyBasic.g in the java
> examples. Does this mean that other people have found that
> guarded predicates don't work?
>
> Needless to say I have not found anything about this in the
> FAQs. "No results found" was the response to a search for "Guarded".
>
> David.
>
>
>
>
>
>
>
>
> abstract_declarator
> : (SCOPE|ID)=> {qualifiedItemIsOneOf(qiPtrMember)}?
> ptr_operator abstract_declarator {declaratorPointerTo();}
> | LPAREN abstract_declarator RPAREN
> (abstract_declarator_suffix)+
> | (LSQUARE (constant_expression )? RSQUARE {declaratorArray();}
> )+
> | /* empty */
> ;
>
>
>
>
> Your use of Yahoo! Groups is subject to
> http://docs.yahoo.com/info/terms/
>
>
--
Co-founder, http://www.jguru.com
Creator, ANTLR Parser Generator: http://www.antlr.org
Lecturer in Comp. Sci., University of San Francisco
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list