import java_cup.runtime.Symbol; %% %{ Symbol makeToken(int id, Object val){ // yychar and yychar+yylength() are the positions of left and right ends return new Symbol(id, yychar, yychar + yylength(), val); } Symbol makeToken(int id){ // as above but with no attribute value return new Symbol(id, yychar, yychar + yylength()); } %} %char %cup %cupdebug %unicode %% "/" {return makeToken(sym.DIVIDE);} [+-]?[0-9]+ {return makeToken(sym.NUMBER, yytext());} [+-]?[0-9]+"."[0-9]* {return makeToken(sym.NUMBER, yytext());} "0x"[0-9a-fA-F]+ {return makeToken(sym.NUMBER, yytext());} "-" {return makeToken(sym.MINUS);} "*" {return makeToken(sym.TIMES);} "(" {return makeToken(sym.LPAREN);} ")" {return makeToken(sym.RPAREN);} "%" {return makeToken(sym.MOD);} "+" {return makeToken(sym.PLUS);} " "|\r|\n|\t|\f {} . {return makeToken(sym.ILLEGAL_CHAR, yytext());}