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: