[antlr-interest] Re: another nondeterminism question

mzukowski at yci.com mzukowski at yci.com
Thu Jul 17 08:30:53 PDT 2003


Ack.  Apparently we need a syn pred in the loop as well!  Try some
variations of this and inspect the generated code to make sure it is working
correctly.  Ignore the warning about superfluous syn preds if one comes up.

class l1 extends Lexer;
S: ('a' | "bb")=>(('a')=>'a' | ("bb")=>"bb")+ | 'b' {$setType(B);};

Monty

-----Original Message-----
From: Adrian Sandor [mailto:aditsu at yahoo.com] 
Sent: Wednesday, July 16, 2003 10:14 PM
To: antlr-interest at yahoogroups.com
Subject: [antlr-interest] Re: another nondeterminism question



well, everything is ok... except that once the lexer starts 
recognizing an S, it fails to detect a B:

the grammar:
---8<---
class l1 extends Lexer;
S: ('a' | "bb")=>('a' | "bb")+ | 'b' {$setType(B);};

class p1 extends Parser;
start: (S|B)+;
--->8---

input data: aba
result: exception: line 1:3: expecting 'b', found 'a'

this is still ok for the "//" comments in my grammar, but it's not ok 
in other cases, like Sanjiv's message 
http://groups.yahoo.com/group/antlr-interest/message/8965

I'm going to read about that linear approximation thing...

Adrian

--- In antlr-interest at yahoogroups.com, mzukowski at y... wrote:
> In fact you may need a syntactic predicate because of the linear 
> approximation issue:
> 
> 
> S: ('a'|"bb")=>('a' | "bb")+
>    | 'b' {$setType(B);}
>    ;
> 
> Let me know, I don't have time to try it out right now.
> 
> Monty
> -----Original Message-----
> From: mzukowski at y... [mailto:mzukowski at y...]
> Sent: Wednesday, July 16, 2003 11:46 AM
> To: antlr-interest at yahoogroups.com
> Subject: RE: [antlr-interest] Re: another nondeterminism question
> 
> 
> OK, this is an linear approximation issue.  If you had A:"aa"
| "bb" things
> would work.  This example is very abstract.  I would code it like
this:
> 
> S: ('a' | "bb")+
>    | 'b' {$setType(B);}
>    ;
> 
> Look up linear approximation in the FAQ & archives.
> 
> Monty
> -----Original Message-----
> From: Adrian Sandor [mailto:aditsu at y...]
> Sent: Wednesday, July 16, 2003 11:26 AM
> To: antlr-interest at yahoogroups.com
> Subject: [antlr-interest] Re: another nondeterminism question
> 
> 
> ok, I tried with the following grammar:
> 
> class l1 extends Lexer;
> options{k=2;}
> protected A: 'a' | "bb";
> B: 'b';
> S: (A)=>(A)+;
> 
> and I got:
> 
> ANTLR Parser Generator   Version 2.7.2   1989-2003 jGuru.com
> t1.g: warning:lexical nondeterminism between rules B and S upon
> t1.g:     k==1:'b'
> t1.g:     k==2:<end-of-token>
> t1.g:5: warning:Syntactic predicate ignored for single alternative
> 
> 
> Adrian
> 
> --- In antlr-interest at yahoogroups.com, mzukowski at y... wrote:
> > That's a weird bug you ran into, I think.  It should give warnings
> in both
> > cases.  You could solve this with a syntactic predicate:
> > 
> > S: (A)=>(A)+;
> > 
> > -----Original Message-----
> > From: Adrian Sandor [mailto:aditsu at y...]
> > Sent: Friday, July 11, 2003 9:54 AM
> > To: antlr-interest at yahoogroups.com
> > Subject: [antlr-interest] another nondeterminism question
> > 
> > 
> > why do I get a nondeterminism warning for this grammar:
> > 
> > class l1 extends Lexer;
> > options{k=2;}
> > protected A: 'a' | "bb";
> > B: 'b';
> > S: (A)+;
> > 
> > but I don't get any warning when I change S to:
> > 
> > S: A (A)+;
> > 
> > and how can I solve it for the first case?
> > I tried many things but to no avail...
> > 
> > thanks
> > Adrian
> > 
> > 
> >  
> > 
> > Your use of Yahoo! Groups is subject to
> http://docs.yahoo.com/info/terms/
> 
> 
>  
> 
> Your use of Yahoo! Groups is subject to
http://docs.yahoo.com/info/terms/ 
> 
> 
>  
> 
> Your use of Yahoo! Groups is subject to
http://docs.yahoo.com/info/terms/


 

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


 

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




More information about the antlr-interest mailing list