[antlr-interest] Questions on parsing data

byeung128 byeung at etrade.ca
Mon Jun 17 14:23:38 PDT 2002


Hi all,

Since I am a beginner in Antlr, I have read the Antlr example 
of "calc.g" and I am writing my first parser program.

The following grammar is trying to group the address information into 
a class "AddressInfo". 

For example, "180 Yonge street West"  
-> AddressInfo.StreetNumber=180
-> AddressInfo.StreetName=Yonge
-> AddressInfo.StreetType=street
-> AddressInfo.StreetDirection=West.

Before grouping the information, I try to print out the data.

The assignments in the AddrTreeWalker (TreeParser) give me the 
compliation error such as "Assignment from token reference only 
allowed in lexer". How can I resolve it ? How can I change the Parser 
rule and TreeParser rules to group the address information into a 
class "AddressInfo" ? Could you give me some hints ?

Thanks in advance for giving me any hint.

Here is the grammar I have written.

class MyParser extends Parser;
options {
  defaultErrorHandler=false;
  buildAST=true ;
}

{
  int i_count = 0 ;
}

startRule: address
   { System.out.println ( "->>>>>ADDRESS:" + 1 ) ; };


address : NUMBER^ STREETNAME streettype (direction)? ;

streettype:  avenue 
          |  street
          ;

avenue: "AVENUE" 
      | "AVENUE."
      | "AVE."
      | "AVE"
      | "AV."
      | "AV"
      ;

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) ; } ;

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) ); 
     } ;


class AddrTreeWalker extends TreeParser;

myexpr returns [ String r ] 
{
   String a, b, c, d, e;
}
   : #(a=NUMBER b=STREETNAME c=streettype d=direction) 
     { System.out.println(  " a=" + a  +
                            ",b=" + b  +
                            ",c=" + c  +
                            ",d=" + d  ) ;
     }
   ;
                            



 

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



More information about the antlr-interest mailing list