improve lexer