import java_cup.runtime.Symbol; %% %public %class Scanner %type Symbol %function token %eofval{ return new Symbol(sym.EOF); %eofval} comment = ("#".*) space = [\ \t\b\015]+ digit = [0-9] integer = {digit}+ exp = ([eE]("+"|"-")?{digit}+) real = ({digit}+"."{digit}*{exp}?|"."{digit}+{exp}?|{digit}+{exp}) %% {space} { } {comment} { } {integer} { return new Symbol(sym.CONSTANT, new Integer(yytext())); } {integer}[lL] { return new Symbol(sym.CONSTANT, new Long(yytext().substring(0, yytext().length()-1))); } {real} { return new Symbol(sym.CONSTANT, new Double(yytext())); } \n { return new Symbol(sym.NL); } "+" { return new Symbol(sym.ADD); } "-" { return new Symbol(sym.SUB); } "*" { return new Symbol(sym.MUL); } "/" { return new Symbol(sym.DIV); } "%" { return new Symbol(sym.MOD); } "(" { return new Symbol(sym.LPAR); } ")" { return new Symbol(sym.RPAR); } . { return new Symbol(sym.error); }