[antlr-interest] Help on syntactic predicate

kelvin7600 kelvin7600 at yahoo.com
Thu Dec 11 20:04:18 PST 2003


Hi all

I just started on learning ANTLR, and ran into a problem with the use 
of syntactic predicate. The .g file below defines just a few tokens : 
WORD(string of alphabets) and NUMBER(string of digits). I tried to 
declare a new token called ALPHANUM, which is defined to be some 
alphabets followed by some digits.

//Lexer

WORD	: ((ALPHABET)+) => (ALPHABET)+ (DIGIT)+ {$setType(ALPHANUM);}
	| (ALPHABET)+
	;

//Parser
alphanum: (an:ALPHANUM { cout << "<alphanum>" << an->getText().c_str
() << "</alphanum>\n"; })
	;

The .g file compiles without a warning but when I run it, it crashes 
with a debug warning "This application has requested the Runtime to 
terminate it in a unusual way." This only happened after I added the 
above code segments to the grammer file. Is there anything wrong in 
the way I wrote my code? Thanks!

Full grammer file :
------------------------------------------------------------------
header {
#include <iostream>
using namespace std;

}

options {
	language="Cpp";
}

class SelfParser extends Parser;
options {
	genHashLines = true;		// include line number 
information
	k=2;
}

sentence:	{cout << "<sentence>\n";}
			(word|number)+ FULLSTOP
			{cout << "</sentence>\n";}
	;

alphanum: (an:ALPHANUM { cout << "<alphanum>" << an->getText().c_str
() << "</alphanum>\n"; })
	;

word:		(w:WORD { cout << "<word>" << w->getText().c_str() 
<< "</word>\n"; })
	;
	
number:		(n:NUMBER { cout << "<number>" << n->getText().c_str
() << "</number>\n"; })
	;

class SelfLexer extends Lexer;
options {
	k=3;
	charVocabulary='\u0000'..'\u007F'; //allow ascii
}


WORD		: ((ALPHABET)+) => (ALPHABET)+ (DIGIT)+ {$setType
(ALPHANUM);}
			| (ALPHABET)+
			;



NUMBER		: (DIGIT)+					
	;
FULLSTOP	: '.'						
	;

protected
ALPHABET	: ('a'..'z'|'A'..'Z')			;

protected
DIGIT		: ('0'..'9')					;



WS			: (	' '
			  |	'\r'
			  |	'\r' '\n'
			  |	'\t'
			  ) 	 {_ttype = ANTLR_USE_NAMESPACE(antlr)
Token::SKIP; } 
			  ;



 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 




More information about the antlr-interest mailing list