refactored both the lexer and token. everything still works