#3 refactor tokenizer