reworking token and lexer