replaced CharacterToken with a more generic StringToken