[antlr-interest] Question on recognizing a pattern
byeung128
byeung at etrade.ca
Wed Jun 12 10:51:23 PDT 2002
I am just a beginner on Antlr and I really think it is a gift for any
developers. After reading some examples, I am trying to write a
parser to recognize a address pattern like "NUMBER STREETNAME
STREETTYPE DIRECTION". When I compiled the following source, I got
error messages like "Lexical rule STREETYPE defined outside of
lexer...". However, I declare all these rules inside the parser
section not lexer section. Could you tell me what goes wrong ? Could
you give me some advice on this grammar ? Thanks in advance.
class MyParser extends Parser;
{
int i_count = 0 ;
}
startRule: a:address
{ System.out.println ( "->>>>>ADDRESS:" + a.getText() ); };
address : NUMBER STREETNAME STREETTYPE DIRECTION ;
STREETTYPE: AVENUE
| STREET
;
AVENUE: "AVENUE"
| "AVENUE."
| "AV"
| "AV."
| "AVE"
| "AVE."
;
STREET: "STREET"
| "STR"
| "STR."
| "ST."
| "ST"
;
DIRECTION: EAST
| WEST
| SOUTH
| NORTH
| NORTHWEST
| SOUTHWEST
| NORTHEAST
| SOUTHEAST
;
EAST: "EAST"
| "E."
| "E"
;
WEST: "WEST"
| "W."
| "W"
;
NORTH: "NORTH"
| "N."
| "N"
;
SOUTH: "SOUTH"
| "S."
| "S"
;
NORTHWEST: "NORTHWEST"
| "NW."
| "NW"
;
NORTHEAST: "NORTHEAST"
| "NE."
| "NE"
;
SOUTHWEST: "SOUTHWEST"
| "SW."
| "SW"
;
SOUTHEAST: "SOUTHEAST"
| "SE."
| "SE"
;
class MyLexer extends Lexer;
options {
charVocabulary = '\3'..'\377' ;
testLiterals=false ;
k = 2 ;
}
{
int i_STREETNAMECount = 0;
int i_DICount = 0;
int i_WSCount = 0;
}
WS : ( ' ' | '\t' | '\n' | '\r' )
{ $setType(Token.SKIP) ;
System.out.println ( "WS:" + (++i_WSCount) ); } ;
STREETNAME
options { testLiterals = true ; }
: ( 'a'..'z' | 'A'..'Z' )+
{ System.out.println ( "CSTREETNAME:" + $getText ) ;
System.out.println ( "STREETNAME:" + (++i_STREETNAMECount) ); } ;
NUMBER: ( '0'..'9' )+
{ System.out.println ( "CNUMBER:" + $getText ) ;
System.out.println ( "NUMBER:" + (++i_DICount) ); } ;
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list