[antlr-interest] breaking out of a closure loop

Terence Parr parrt at jguru.com
Wed Dec 12 00:29:56 PST 2001


On Tuesday, December 11, 2001, at 02:43  PM, mzukowski at bco.com wrote:

> Ter, you need a disambiguating semantic predicate, yes?  Otherwise an
> exception is thrown on the assumption that it is a validating 
> predicate.  So
> you have to have another alternative there.  I think the idiom I used 
> was:
>
> (
> 	{keepGoing}? otherRule
> 	| SOME_IMAGINARY_NEVER_GENERATED_TOKEN
> )+

Isn't

( {pred}? ... )*

an idiom or something that always includes the pred in the loop 
termination?  Don't have time to check at the moment ;)  You're right if 
not.  You would need something following the loop, generally, or an alt 
of the loop to be ambiguous with the lookahead of the alt with the pred.

> SOME_IMAGINARY_NEVER_GENERATED_TOKEN gives the loop a non-guarded
> alternative which will never be matched (because the lexer never 
> generates
> it) but gives the semantic predicate an alternative so the predicate is
> disambiguating instead of validating.  When keepGoing is false then no
> viable alternative will be found and the loop will break appropriately.
>
> For antlr 3 would it be possible to incorporate a $break() as an 
> action?  Or

Not sure what the analysis would do with that. Hmm....not sure it would 
be legal without destroying the validity of the grammar analysis.

> some other appropriate distinction between a validating and 
> disambiguating
> predicate?  People always get confused between those two anyways.  And 
> even
> in a loop with only one alternative in the loop it is appropriate to 
> have a
> disambiguating predicate to break the loop.
>
> Actually the entire role of a validating predicate merits some 
> thinking.  I
> don't think I have personally used them.  However, they could be part 
> of a
> saner, broader error handling mechanism.

My original thought was: just specify semantic validity--antlr will 
decide whether it needs to and can use the pred in a decision.  Kinda 
like just adding assertions, right?  OTOH, people only put them in when 
they want it to help disambiguate.  Perhaps only disambiguating preds 
are useful.

Ter


 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 



More information about the antlr-interest mailing list