[antlr-interest] Re: Antlr noobie, nondeterminism abounds

WesSantee jws01 at thevortex.com
Sun May 9 11:25:30 PDT 2004


--- In antlr-interest at yahoogroups.com, "lgcraymer" <lgc at m...> wrote:
> You are trying to do too much in the lexer.  Consider factoring
things
> a bit:

Ah, OK.  That helped quite a bit.  I'm no longer getting the lexer
nondeterminisms.  Thanks!

However (and I think this is because I just don't know enough about
how antlr is operating), I'm now getting parser nondeterminisms, but
this time I don't even understand what's wrong.  

It may have something to do with this rule I mentioned before:

> > 3) Create a lexer rule represeting everything in CHAR *except*
> > '\r' and '\n'.

That example was, unfortunately, just an example.  In the case of the
grammar I'm trying to create there are a lot of these <any SET except
some SUBSET> rules.  By the time I factored everything out, to
represent an 8-bit char from \u0001..\u00FF, I have the following:

char8
: ASCII_x01_TO_x09 | CR | ASCII_x0B_TO_x0C | LF 
| ASCII_x0E_TO_x1F | SP | ASCII_x21 | DQUOTE 
| ASCII_x23_TO_x24 | PERCENT | ASCII_x26_TO_x27 | LPAREN 
| RPAREN | STAR | ASCII_x2B_TO_x2F | DIGIT | ASCII_x3A_TO_x5B 
| BACKSLASH | RBRACKET | ASCII_x5E_TO_x7A | LBRACE | ASCII_x7C 
| RBRACE | ASCII_x7E_TO_x7F | ASCII_x80_TO_xFF
;

*Whew*. Then to implement the subsets, I set the charVocabulary to
\1..\377 and use the ~ like you suggested:

// Any 7-bit char except CR and LF
text_char: ~(CR | LF | ASCII_x80_TO_xFF);

So far so good, but here's the problem.  I've got a parser rule that
looks like this:

crlf:  CR LF;
number:  (DIGIT)+;
literal:  LBRACE number RBRACE crlf (char8)*;

When I run cantlr on it, I get the following:

test.g:77: warning:nondeterminism upon
test.g:77:     k==1:SP,RPAREN
test.g:77:     between alt 1 and exit branch of block

Increasing k just gives more warnings for each level of k. 
Unfortunately I have no idea what that means, or how to go about
getting rid of it.  Obviously it can't determine something at k==1,
but like I said, increasing k doesn't solve the problem, so I'm
stumped.  Any ideas?

Cheers,
-Wes



 
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