На этапе лексического анализа проверить валидность лексемы не всегда возможно. Скажем, тип данных int32 (условное название типа, содержащего знаковое 32-битное целое) может хранить число в диапазоне [-2147483648; 2147483647]. При этом, константное выражение "2147483648" считается невалидным, а то же самое, но со знаком минус "-2147483648" - вполне валидно. В идеале, лексический анализатор не должен знать о знаке числа. Определение того, унарный или бинарный это минус (а может, язык поддерживает интервалы типа "10-100" или еще какую-то экзотику), лежит на плечах синтаксического анализатора.
Однако, базовый анализ валидности токенов действительно проще делать в лексическом анализаторе. Например, строковые литералы чаще всего проверяются на валидность escape-символов именно в процессе лексического анализа. Чем раньше будет найдена ошибка, тем проще восстановить ошибочное состояние анализатора.