[antlr-interest] literals.

Cristian Amitroaie cristian at amiq.ro
Wed Dec 10 02:41:11 PST 2003


Why not simply adding to the lexer:

tokens {
   IN="in";
   INSTANCE_OF="instanceof";
};

or refering to "in" and "instanceof" in the parser?

This is what testLiterals is used for.

On Wednesday 10 December 2003 12:32, aravind srinivasan wrote:
> You can try using syntactic predicate. I am not sure if that would be the
> correct way of 
 doing it as i have just started using antlr.
>   
> ...| ("instanceof") => "instanceof" { rel_op = JSToken.InstanceOf; }  
>
> 	| "in" { rel_op = JSToken.In; }   
>
>         ;
> 
> Aravind.
> 
> -----Original Message-----
> From: cesar octavio lopez nataren [mailto:cesar at ciencias.unam.mx]
> Sent: Wednesday, December 10, 2003 6:01 AM
> To: antlr-interest at yahoogroups.com
> Subject: Re: [antlr-interest] literals.
> 
> 
> On Wed, 2003-12-10 at 01:00, Oliver Zeigermann wrote:
>
> > This looks like you need more lookahead, k=3 should do to distinguish 
> > "in" from "instanceof".
> > "in" : LA(1)=i, LA(2)=n, LA(3)=?
> > "instance" : LA(1)=i, LA(2)=n, LA(3)=s
>
> 
> Hello Oliver:
> 
> Look, If I put:
> 
> relational_op returns [JSToken rel_op]
> { rel_op = JSToken.None; }
>
>         : LESS_THAN { rel_op = JSToken.LessThan; }
>         :
>         | GREATER_THAN { rel_op = JSToken.GreaterThan; }
>         | LESS_EQ { rel_op = JSToken.LessThanEqual; }
>         | GREATER_EQ { rel_op = JSToken.GreaterThanEqual; }
>         | "instanceof" { rel_op = JSToken.InstanceOf; }           <<<---
> 	|
> 	| "in" { rel_op = JSToken.In; }   <<<----
>
>         ;
>  
> I get the message: jscript.g:573:11:     k==1:"in"
> 
> Note that on my lexer options I already have: k = 3
> 
> If I erase that and add the lexical rule
> 
> IN: "in";
> 
> I get: 
> 
> jscript.g: warning:lexical nondeterminism between rules IDENTIFIER and
> IN upon
> jscript-lexer-parser.g:     k==1:'i'
> jscript-lexer-parser.g:     k==2:'n'
> jscript-lexer-parser.g:     k==3:<end-of-token>
> 
> The definition of IDENTIFIER  that I have is:
> 
> IDENTIFIER
> options { testLiterals = true; }
>
>         : ('a'..'z' | 'A'..'Z') ('a'..'z' | 'A'..'Z' | '0'..'9')*
>
>         ;
> 
> what can I do?
> 
> Thanks a lot for the help.
> 
> César
> 
>  
> 
> 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