separated tokenizer and lexer