00001: import java_cup.runtime.SymbolFactory;
00002: import java_cup.runtime.ComplexSymbolFactory;
00003: 
00004: %%
00005: 
00006: %class DemoLexer
00007: %public
00008: %{
00009:    private SymbolFactory sf = new ComplexSymbolFactory ();
00010:    public DemoLexer (java.io.InputStream r, SymbolFactory sf)
00011:    {
00012:      this (r);
00013:      this.sf = sf;
00014:    }
00015: %}
00016: %eofval{
00017:   return sf.newSymbol ("EOF", sym.EOF);
00018: %eofval}
00019: 
00020: %unicode
00021: 
00022: %cup
00023: %cupdebug
00024: 
00025: %char
00026: %column
00027: %line
00028: 
00029: 
00030: ALPHA=[A-Za-z_]
00031: DIGIT=[0-9]
00032: NONNEWLINE_WHITE_SPACE_CHAR=[\ \t\b\012]
00033: NEWLINE=\r|\n|\r\n
00034: IDENT={ALPHA}({ALPHA}|{DIGIT}|_)*
00035: 
00036: %% 
00037: 
00038: <YYINITIAL> {
00039:   "Dragon"
00040:     { return sf.newSymbol ("Dragon", sym.DRAGON); }
00041: 
00042:   "Alice"|"Bob"
00043:     { return sf.newSymbol ("AliceOrBob", sym.ALICEORBOB); }
00044:   
00045:   {DIGIT}{DIGIT}{DIGIT}{DIGIT}{DIGIT}
00046:     { return sf.newSymbol ("FiveDigits", sym.FIVEDIGITS); }
00047: 
00048:   {DIGIT}{1,3}
00049:     { return sf.newSymbol ("ShortDigits", sym.SHORTDIGITS); }
00050: 
00051:   {DIGIT}+
00052:     { return sf.newSymbol ("Digits", sym.DIGITS); }
00053: 
00054:   "http://" ({IDENT} ".")* {IDENT}
00055:     { return sf.newSymbol ("SimpleURL", sym.SIMPLEURL); }
00056: 
00057:   {NONNEWLINE_WHITE_SPACE_CHAR}+ { }
00058: 
00059:   {IDENT}
00060:     { return sf.newSymbol ("Identifier", sym.IDENTIFIER, yytext ()); }
00061: }
00062: 
00063: {NEWLINE} { }
00064: 
00065: . { System.out.println ("Illegal character: <" + yytext () + ">"); }
00066: