[antlr-interest] Common left prefix for Antlr tokens...

Stuart Dootson stuart.dootson at gmail.com
Mon Jan 16 12:08:32 PST 2012


Thanks - I'll give that a try...

Stuart

On 16 Jan 2012, at 07:55 PM, Jim Idle <jimi at temporal-wave.com> wrote:

> fragment EXTENDED_PROP : ;
> LSQ    :    '['
>       (
>          ('[[___')=> '[[___' { $type = EXTENDED_PROP; }
>          |
>       )
> ;
> 
> That should do it in this case I think.
> 
> Jim
> 
>> -----Original Message-----
>> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
>> bounces at antlr.org] On Behalf Of Stuart Dootson
>> Sent: Monday, January 16, 2012 7:09 AM
>> To: antlr-interest
>> Subject: [antlr-interest] Common left prefix for Antlr tokens...
>> 
>> Hello
>> 
>> One of my colleagues has been using Antlr 3 to create a lexer/parser
>> for the L5K language (used to program Allen-Bradley PLCs). This has
>> proceeded generally well, until coming across a little problem.
>> 
>> The problem is with the array literal start token ('[') and an
>> 'extended property' indicator ('[[[___'). More specifically, nested
>> arrays with no whitespace between the outer and inner array start, for
>> example "[[1], 2]", are interpreted by Antlr as an extended property
>> introduction, causing a "mismatched character" exception.
>> 
>> I have come up with a workaround, by overriding the 'emit' and
>> 'nextToken' methods of the lexer, to allow the strings "[[" and "[[["
>> to be converted to multiple "[" tokens through calling 'emit' in
>> actions, but was wondering if this use-case can be implemented without
>> requiring this extra code, through use of one or more options on the
>> grammar/rules?
>> 
>> A minimal Antlr grammar is appended...
>> 
>> Stuart Dootson
>> 
>> grammar arrays;
>> 
>> stat
>>    :    array
>>    |    EXTENDED_PROP
>>    ;
>> 
>> array
>>    :     LSQ value ( ',' value)* RSQ
>>    ;
>> 
>> value
>>    :    INT
>>    |    array
>>    ;
>> 
>> INT    :    ('0' .. '9')+
>>    ;
>> 
>> 
>> EXTENDED_PROP
>>    : '[[[___'
>>    ;
>> 
>> LSQ    :    '['
>>    ;
>> 
>> RSQ    :    ']'
>>    ;
>> 
>> WS    : (' '|'\n'|'\r')+ {$channel=HIDDEN;}
>>    ;
>> 
>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
>> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-
>> email-address
> 
> 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