[antlr-interest] strange lexical nondeterminism

mzukowski at yci.com mzukowski at yci.com
Mon Mar 8 09:21:13 PST 2004


You're hitting a limitation of the lookahead compression that ANTLR uses.
To do what you want you will have to use a syntactic predicate.  

You may have luck doing this:

REL_TIME: '0'..'2' '0'..'9' ':' '0'..'5' '0'..'9';
REL_TIME2: '0'..'9' '0'..'9' '0'..'9' '.' '0'..'2' '0'..'9' ':'
'0'..'5' '0'..'9' {$setType(REL_TIME);};
INT: ('0'..'9')+;

Monty

-----Original Message-----
From: Simon Kellett [mailto:skellett at anitesystems.de] 
Sent: Monday, March 08, 2004 5:56 AM
To: antlr-interest at yahoogroups.com
Subject: [antlr-interest] strange lexical nondeterminism

Two of the rules in my Lexer are:

// optional 3 digit day, followed by hh:mm
REL_TIME: ('0'..'9' '0'..'9' '0'..'9' '.')? '0'..'2' '0'..'9' ':'
'0'..'5' '0'..'9';
INT: ('0'..'9')+;

But I get the following warning (k=10):

lmp_grammer.g: warning:lexical nondeterminism between rules REL_TIME
and INT upon
lmp_grammer.g:     k==1:'0'..'9'
lmp_grammer.g:     k==2:'0'..'9'
lmp_grammer.g:     k==3:'0'..'9'
lmp_grammer.g:     k==4:'0'..'5'
lmp_grammer.g:     k==5:'0'..'9'
lmp_grammer.g:     k==6:<end-of-token>,'0'..'9'
lmp_grammer.g:     k==7:<end-of-token>
lmp_grammer.g:     k==8:<end-of-token>,'0'..'5'
lmp_grammer.g:     k==9:<end-of-token>,'0'..'9'
lmp_grammer.g:     k==10:<end-of-token>

If I remove the optional "?" then the warning disappears.

Surely the Lexer (with k>3) should always know whether it is dealing
with a REL_TIME or an INT ? (if the 4th char is a '.' or the 3rd is a
':' then the token must be a REL_TIME).

I could understand the nondeterminism if k=3 !!

But the generated code is OK: the REL_TIME is checked for first, and
only later the INT is check for.

TIA, Simon



 
Yahoo! Groups Links



 


 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
     http://groups.yahoo.com/group/antlr-interest/

<*> To unsubscribe from this group, send an email to:
     antlr-interest-unsubscribe at yahoogroups.com

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



More information about the antlr-interest mailing list