%% %class Lexer %type Token %function next_token %char %line %eofval{ return new Token (sym.EOF, null); %eofval} %yylexthrow{ Exception %yylexthrow} WHITESPACE = [\ \t\r\n]+ INTEGER_LITERAL = [0-9]+ IDENTIFIER = [a-zA-Z][a-zA-Z0-9]* FLOAT_LITERAL = [0-9]*"."[0-9]+ %% ";" {return new Token (sym.SEMICOLON, yychar,yychar+1,yytext(),yyline);} "=" {return new Token (sym.EQ, yychar,yychar+1,yytext(),yyline);} "{" {return new Token (sym.LBRACE, yychar,yychar+1,yytext(),yyline);} "}" {return new Token (sym.RBRACE, yychar,yychar+1,yytext(),yyline);} "if" {return new Token (sym.IF, yychar,yychar+2,yytext(),yyline);} "(" {return new Token (sym.LPAREN, yychar,yychar+1,yytext(),yyline);} ")" {return new Token (sym.RPAREN, yychar,yychar+1,yytext(),yyline);} "while" {return new Token (sym.WHILE, yychar,yychar+5,yytext(),yyline);} "==" {return new Token (sym.EQEQ, yychar,yychar+2,yytext(),yyline);} {INTEGER_LITERAL} {return new Token (sym.INTEGER_LITERAL,yychar,yychar+yytext().length(),new Integer(yytext()),yyline);} {IDENTIFIER} {return new Token (sym.IDENTIFIER,yychar,yychar+yytext().length(),yytext(),yyline);} {FLOAT_LITERAL} {return new Token (sym.FLOAT_LITERAL,yychar,yychar+yytext().length(),new Float(yytext()),yyline);} {WHITESPACE} { } . { throw new Exception ("Lexical: unmatched input at line " + (yyline+1)); }