[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