[antlr-interest] Why No Error?
Bogdan Mitu
bogdan_mt at yahoo.com
Thu Aug 15 03:49:39 PDT 2002
Hi,
If you want to be sure that all the input has been parsed, you should finish
the main rule with EOF:
file : (line)+ EOF ;
As a side note, the way you defined the grammar, Comma between records is
optional. If you want Comma to be mandatory between records, try:
line : rec (COMMA rec)* NEWLINE ;
rec : r:RECORD { action ... }
Cheers,
Bogdan
--- genericised <trigonometric at softhome.net> wrote:
> I created the following parser, as an example of how to
> parse comma separated variable (CSV) files:
>
> class CSVParser extends Parser;
> file : (line)+ ;
> line : (rec)+ NEWLINE ;
> rec : (r:RECORD) (COMMA)?
> {System.out.println(r.getText());}
> ;
>
> The corresponding Lexer is:
>
> class CSVLexer extends Lexer;
> options { charVocabulary='\3'..'\377'; }
> RECORD : (~(','|'\r'|'\n'|' '|'\t'))+ ;
> COMMA : ',' ;
> NEWLINE : ('\r''\n')=> '\r''\n' //DOS
> | '\r' //MAC
> | '\n' //UNIX
> { newline(); }
> ;
> WS : (' '|'\t') { $setType(Token.SKIP); } ;
>
> Pretty straightforward, but, when I run this on a
> CSV it produces no error.
>
> The last line of a CSV is:
>
> blah, blah, blah
>
> so the line does not consist of
>
> rec+ NEWLINE
>
> but
>
> rec+
>
> When
>
> match(NEWLINE)
>
> is called from the parser, why does it not throw
> a mismatchedTokenException?
>
> Or does it throw some kind of exception that is
> caught and causes the parsing of the inputstream
> to terminate gracefully?
>
> The parser is invoked from some main file like this:
>
> csvParser.file();
>
> I have spent a couple of hours investigating this,
> looking through the ANTLR source and stuff but I
> have not yet found where this is dealt with?
>
> I might do a bit of weekend investigation into this
> because of what I will learn in the process of
> determining this but at the moment I am supposed to
> be writing this ANTLR tutorial and then got side
> tracked trying to explain why it is OK that the
> parser does not match the final NEWLINE.
>
> Well actually, is it ok, or should the rule for file
> be defined something like:
>
> file : (line)+ EOFCHAR;
>
> Regards
>
> A Person
>
>
>
>
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
>
>
>
__________________________________________________
Do You Yahoo!?
HotJobs - Search Thousands of New Jobs
http://www.hotjobs.com
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list