lexer overhaul