cleanup and start lexer abstraction