[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