lexer improved