import java_cup.runtime.SymbolFactory; import java_cup.runtime.ComplexSymbolFactory; %% %class DemoLexer %public %{ private SymbolFactory sf = new ComplexSymbolFactory (); public DemoLexer (java.io.InputStream r, SymbolFactory sf) { this (r); this.sf = sf; } %} %eofval{ return sf.newSymbol ("EOF", sym.EOF); %eofval} %unicode %cup %cupdebug %char %column %line ALPHA=[A-Za-z_] DIGIT=[0-9] NONNEWLINE_WHITE_SPACE_CHAR=[\ \t\b\012] NEWLINE=\r|\n|\r\n IDENT={ALPHA}({ALPHA}|{DIGIT}|_)* %% { "Dragon" { return sf.newSymbol ("Dragon", sym.DRAGON); } "Alice"|"Bob" { return sf.newSymbol ("AliceOrBob", sym.ALICEORBOB); } {DIGIT}{DIGIT}{DIGIT}{DIGIT}{DIGIT} { return sf.newSymbol ("FiveDigits", sym.FIVEDIGITS); } {DIGIT}{1,3} { return sf.newSymbol ("ShortDigits", sym.SHORTDIGITS); } {DIGIT}+ { return sf.newSymbol ("Digits", sym.DIGITS); } "http://" ({IDENT} ".")* {IDENT} { return sf.newSymbol ("SimpleURL", sym.SIMPLEURL); } {NONNEWLINE_WHITE_SPACE_CHAR}+ { } {IDENT} { return sf.newSymbol ("Identifier", sym.IDENTIFIER, yytext ()); } } {NEWLINE} { } . { System.out.println ("Illegal character: <" + yytext () + ">"); }