By the way, I understand you did it this way because of ``ITokenScanner``, so if my suggestion doesn't make sense (or you think it would make the code harder to understand), then ignore my above comment.