[antlr-interest] Lexer rule match keyword or identifierdepending on the previous token
Edwards, Waverly
Waverly.Edwards at genesys.com
Thu Aug 23 12:43:01 PDT 2007
I'll have to look this over quite a few times.
I'm not savvy enough yet to understand how this works.
W.
-----Original Message-----
From: Guillaume Chavanon [mailto:guillaume.chavanon at systemsvip.com]
Sent: Thursday, August 23, 2007 8:27 AM
To: Edwards, Waverly
Cc: antlr-interest at antlr.org
Subject: Re: [antlr-interest] Lexer rule match keyword or
identifierdepending on the previous token
Hi,
I just wrote a function (in java) that look for the special character (a
caret) backward in the TokenStream. We have to pass it as a lexer
member.
The function skip hidden tokens. It can be use in a gated semantic
predicate in the lexer to match "int", "char" or "string" as keyword or
identifier.
I have successfully parse the following input :
int i1 = 30 ;
char c1 = 'h' ;
int i2 = c^int ;
string s1 = "hello" ;
char c2 = s1^ char(2) ;
int i3 = s1^char(2)^int ;
Where "int" and "char" after a caret are set as IDENTIFIER tokens
whereas others are tokens of type INT, CHAR or STRING.
Even second "char" in line 5 witch previous token is a WS.
See attach grammar for more details.
Guillaume Chavanon
Edwards, Waverly wrote:
> Interesting enough. This afternoon I thought of a case that I will
> need to deal with that works exactly like what you described. Looking
> ahead is not going to be the same as looking back or at the very least
> the logic is going to be more complicated looking ahead than looking
> back. When I get to that point in my grammar I'll let you know what I
> did. I want to deal with the case in the lexer and not the parser so
> this should be interesting. I don't know if there is a
> 'previousToken' ( I doubt it ) since storing each token seems like a
> waste I'll try to come up with something
>
>
> W.
>
>
> -----Original Message-----
> From: antlr-interest-bounces at antlr.org
> [mailto:antlr-interest-bounces at antlr.org] On Behalf Of Edwards,
> Waverly
> Sent: Monday, August 20, 2007 9:22 AM
> To: antlr-interest at antlr.org
> Subject: Re: [antlr-interest] Lexer rule match keyword or
> identifierdepending on the previous token
>
>
> Is this different that looking ahead? If you are at token B and token
> A determines how your respond to token B then wouldn't this be the
> same as being at token A, looking ahead and seeing token B then
> responding the same way? I don't know the circumstance so I don't
> really know. I haven't figured out how the lookahead in ANTLR works
> just yet but I know it exists.
>
>
> W.
>
> -----Original Message-----
> From: antlr-interest-bounces at antlr.org
> [mailto:antlr-interest-bounces at antlr.org] On Behalf Of Guillaume
> Chavanon
> Sent: Monday, August 20, 2007 5:45 AM
> To: antlr-interest at antlr.org
> Subject: [antlr-interest] Lexer rule match keyword or identifier
> depending on the previous token
>
> Hi all,
>
> I am writing a grammar for a language that allow some keywords to be
> identifiers if they are preceded by a special character.
> Is it possible to add gated semantic predicate in a lexer rule that
> will test the previous token ?
> I would like to do something like this :
>
> IDENTIFIER
> : { previousToken != ... }?=> 'KEYWORD1' {$type=KEYWORD1;}
> | { previousToken != ... }?=> 'KEYWORD2' {$type=KEYWORD2;}
> | 'A'..'Z' ( '_'? ( 'A'..'Z' | '0'..'9' ) )*
> ;
>
> Thanks in advance,
> Guillaume Chavanon
>
More information about the antlr-interest
mailing list