[antlr-interest] newbie question
    Barry Kelly 
    barry.j.kelly at gmail.com
       
    Tue Oct 26 08:31:33 PDT 2004
    
    
  
I've removed the actions and some of the parentheses to improve
readability here:
> class CSVParser extends Parser;
> options { k=1; }
> line 
>        : (record )+ NEWLINE 
>        | EOF
>        ;
> 
> record
>        : RECORD (COMMA)?
>        | COMMA
>        ;
You'll see that, when reading in multiple records on a line, there are
two ways to parse a comma. It could be eaten by
1) the first alternative of the record rule, 
or
2) it could be ignored until the next iteration of the (record)+ part
of the line rule and read as the second alternative of the record
rule.
One way to get rid of this is to use options { greedy = true; } just
before the (COMMA)? part of the record rule. Another way would be to
rewrite line as something like:
line 
       : (RECORD)? (COMMA (RECORD)?)* NEWLINE 
       | EOF
       ;
 
-- Barry
 
Yahoo! Groups Links
<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/antlr-interest/
<*> To unsubscribe from this group, send an email to:
    antlr-interest-unsubscribe at yahoogroups.com
<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 
    
    
More information about the antlr-interest
mailing list