Hi Richard,

The answer is to use 2 lexer rules instead of one, and change the parser 
rule. It is generally not a good idea to mark whitespace as hidden (as 
you have done), and also use whitespace in your lexer rules. Here is 
what I would try:

grammar testing;

start :
        (       DOLLAR? INT CENTS?
        |       NEW_LINE
        )+
        ;

fragment DIGIT : '0'..'9';

DOLLAR  : '$';
CENTS   : '.' DIGIT DIGIT;

INT :  DIGIT+ (',' DIGIT+)*;

NEW_LINE
        : ('\r'?'\n');

WS  : (SPACE |'\t'|'\u000C')
        {$channel=HIDDEN;};
        
fragment SPACE
        : ' ';


- Justin

On 2/15/2011 6:05 AM, Richard Druce wrote:
> Hi,
>
> I'm sure this question has been answered before but I'm not sure how
> to phrase it well enough to find it in the archives.
>
> I want to match to inputs an INT such as '   170  \n'
> and an AMOUNT such as '  $ 170.00 ' (unfortunately there is
> occasionally a space before the amount)
>
> The following grammar works for ' $ 170.00 ' but not for  ' 170 ' it
> sees the space and tries to match the AMOUNT and the output
> 'mismatched character ' ' expecting '.' ' is provided.  Reading
> through the antlr reference book, it looks like there are a number of
> ways to possibly handle this but I'm not sure how best to approach it.
>
> grammar testing;
>
> start :
>       (AMOUNT
>       | INT
>       | NEW_LINE)+;
>
> fragment DIGIT : '0'..'9';
>
> AMOUNT        : '$'? SPACE? DIGIT+ (','DIGIT+)? '.' DIGIT DIGIT;
>
> INT :  DIGIT+ (','DIGIT+)?;
>
> NEW_LINE
>       : ('\r'?'\n');
>
> WS  : (SPACE |'\t'|'\u000C')
>       {$channel=HIDDEN;};
>       
> fragment SPACE
>       : ' ';
>
> Thanks,
>
> Richard
> --
> m: +44 753 489 2926
>
> 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

-- 
You received this message because you are subscribed to the Google Groups 
"il-antlr-interest" group.
To post to this group, send email to il-antlr-inter...@googlegroups.com.
To unsubscribe from this group, send email to 
il-antlr-interest+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en.

Reply via email to