[antlr-interest] How to do "not" in a syntactic predicate?

Indhu Bharathi indhu.b at s7software.com
Wed Oct 14 04:19:04 PDT 2009


The other say I replied from my ipod and was not able to test it with ANTLR.
I checked it now and the code doesn't work for me too. However you can try a
variant:

 

q             :               a ((b)=>NOWAY | /*nothing*/)

                ;

 

fragment NOWAY

                :               ;

 

This is tested J But note that this is only a hack and use it only when
there is no other alternative. 

 

Going by your "one of my "smaller" rules is "consuming" something that
should belong to a "larger" rule" description, it looks like you can solve
that problem by turning off greedy. Grep for 'greedy' in the book or wiki.

 

Cheers, Indhu

 

 

From: antlr-interest-bounces at antlr.org
[mailto:antlr-interest-bounces at antlr.org] On Behalf Of Naveen Chawla
Sent: Wednesday, October 14, 2009 3:50 PM
To: Jim Idle
Cc: antlr-interest at antlr.org
Subject: Re: [antlr-interest] How to do "not" in a syntactic predicate?

 

Jim, being new to predicates I realised soon after this that you were
talking about token lookaheads. And yes I do need a syntactic lookahead (but
thas is negative). In beginner-speak, one of my "smaller" rules is
"consuming" something that should belong to a "larger" rule. This would be
correct if that particular something (e.g. "a") was *not* followed by a
syntactic construct conforming to "b". Hence (a !b)=>a (for the smaller
rule) seems the simplest solution to this to me. Is Indhu's version correct
for doing this trick? It doesn't seem to work for me (but I might be doing
something else wrong). If not correct, what is the correct way? My target is
Java.

2009/10/5 Jim Idle <jimi at temporal-wave.com>

Use a semantic predicate rather than syntactic. You possibly need a bated
predicate here too:

 

{ input.LA(1) == A && input.LA(2) != B}?=>

 

However, if you need that kind of syntactic predicate, then I suggest you
may be approaching your problem incorrectly.

 

Jim

 

From: antlr-interest-bounces at antlr.org
[mailto:antlr-interest-bounces at antlr.org] On Behalf Of Naveen Chawla
Sent: Monday, October 05, 2009 7:02 AM 


To: antlr-interest at antlr.org
Subject: [antlr-interest] How to do "not" in a syntactic predicate?

 

If I do

 

(a ~b)=> a

 

meaning "take this alternative if you encounter an a when not followed by b"

 

I get a syntax error: unexpected token b

Is it the right syntax to use '~'?

 

N



List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20091014/17604a11/attachment.html 


More information about the antlr-interest mailing list