[antlr-interest] Non-greedy lexer rule in ANTLR4

Terence Parr parrt at cs.usfca.edu
Fri Oct 12 15:50:03 PDT 2012


would '<<' .* '>>' work?
Ter
On Oct 12, 2012, at 10:17 AM, Bart Kiers wrote:

>> Is it possible to write a non-greedy lexer rule that does not contain a
>> dot in ANTLR4? For example:
>> 
>> ANCHOR
>>   : '<<' ( ~( '>>' | '\r' | '\n' ) )* '>>'
>>   ;
>> 
> 
> Hi Michel,
> 
> You can't negate two (or more) characters: negation only works for
> char-sets that match a single character.
> 
> 
> 
>> I'm using 4.0b2 and the above seems to be greedy.
>> 
>> Alternatively, would it be possible to rewrite this rule so it includes
>> everything from '<<' to the first '>>' but not more?
>> 
> 
> Try something like this:
> 
> ANCHOR
>   : '<<' ( ~( '>' | '\r' | '\n' ) | '>' ~'>' )* '>>'
>   ;
> 
> regards,
> 
> Bart.
> 
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address



More information about the antlr-interest mailing list