Lexer refactoring start