[antlr-interest] Re: unexpected token where it IS defined
lgcraymer
lgc at mail1.jpl.nasa.gov
Tue Feb 10 16:29:55 PST 2004
I'm not sure that it's the only problem, but the ANTLR grammar does not recognize '+' or '*' as suffixes--you need the parentheses.
Replace WS* with (WS)* and CRLF with (CRLF)+.
Also, for most grammars it is better to ignore the formatting information--WS and CRLF (set token type to "SKIP"), for example.
There are exceptions, but they are better identified as such.
--Loring
--- In antlr-interest at yahoogroups.com, "offline314159" <offline at s...> wrote:
> Below is the .g file that i'm working on - bear in mind that i am
> completely new to antlr and parser generators in general.
>
> I'm using the latest antlreclipse plugin to generate the parser, and i
> get the following error every time i try to compile the file as you
> see it here:
>
> rule classDef trapped:
> unexpected token: WS
>
> on line 33
>
> Can someone tell me what i'm missing here? Do i have to predefine the
> WS token or something? How do i make this work?
>
> ===begin vcard.g===
>
> header {
> package aimedia.vcard.util.parser;
> }
>
> {
> import java.io.*;
> }
>
> /** This parser recognizes VCard v2.1 files
> * @author Chris Rose
> */
> class VCardParser extends Parser;
>
> options {
> k=3; // Lookahead of only 1 character
> }
>
> tokens {
> BEGIN = "BEGIN";
> COLON = ":";
> END = "END";
> VCID = "VCARD";
> ADR = "ADR";
> ORG = "ORG";
> N = "N";
> AGENT = "AGENT";
> }
>
> vcard_file :
> (wsls)* vcard (wsls)*; // This is the main VCard root
>
> vcard :
> BEGIN WS* COLON WS* VCID WS* CRLF+ items CRLF+ END WS* COLON WS* VCID;
>
> items :
> (item CRLF*)*;
>
> item :
> (groups ".")? actualItem;
>
> actualItem :
> name (params)? COLON value CRLF |
> ADR (params)? COLON addressparts CRLF |
> ORG (params)? COLON orgparts CRLF |
> N (params)? COLON nameparts CRLF |
> AGENT (params)? COLON vcard CRLF;
>
> name :
> "LOGO" | "PHOTO" | "LABEL" | "FN" | "TITLE" |
> "SOUND" | "VERSION" | "TEL" | "EMAIL" | "TZ" |
> "GEO" | "NOTE" | "URL" | "BDAY" | "ROLE" |
> "REV" | "UID" | "KEY" | "MAILER" |
> xWord;
>
> value :
> // Various
> WORD*
>
> params :
> (";" WS* param)*;
>
> param :
> "TYPE" WS* EQUALS WS* ptypeval |
> "VALUE" WS* EQUALS WS* pvalueval |
> "ENCODING" WS* EQUALS WS* pencodingval |
> "CHARSET" WS* EQUALS WS* charsetval |
> "LANGUAGE" WS* EQUALS WS* languageval |
> xWord WS* EQUALS WS* word |
> knowntype;
>
> ptypeval :
> knowntype | word;
>
> pvalueval :
> "INLINE" | "URL" | "CONTENT-ID" | "CID" | xWord;
>
> pencodingval :
> "7BIT" | "8BIT" | "QUOTED-PRINTABLE" | "BASE64" | xWord;
>
> charsetval :
> "UTF-8"; // And other charsets as defined in RFC 1521 - look it up, i
> guess.
>
> languageval:
> "EN"; // And others from rfc 1766
>
> knowntype :
> "DOM" | "INTL" | "POSTAL" | "PARCEL" | "HOME" |
> "WORK" | "PREF" | "VOICE" | "FAX" | "MSG" |
> "CELL" | "PAGER" | "BBS" | "MODEM" | "CAR" |
> "ISDN" | "VIDEO" | "AOL" | "APPLELINK" |
> "ATTMAIL" | "CIS" | "EWORLD" | "INTERNET" |
> "IBMMAIL" | "MCIMAIL" | "POWERSHARE" |
> "PRODIGY" | "TLX" | "X400" | "GIF" | "CGM" |
> "WMF" | "BMP" | "MET" | "PMB" | "DIB" | "PICT" |
> "TIFF" | "PDF" | "PS" | "JPEG" | "QTIME" | "MPEG" |
> "MPEG2" | "AVI" | "WAVE" | "AIFF" | "PCM" | "X509" |
> "PGP";
>
> class VCardLexer extends Lexer;
>
> WS :
> ' ' | '\t';
>
> CRLF :
> "\n" | "\n\r";
>
> ===end vcard.g===
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