refactor Lexer/Token