Рассмотрим три конкретных лексемы: число "20", идентификатор "X" и символьную константу "20Х". Вопрос: как сканер умудряется их различать, ведь "20" и "20Х" начинаются одинаково?

Ответ потрясающий, конечно. Дело в том, что он их в первом приближении и не различает вовсе. С точки зрения сканера лексема "20Х" - это тоже число. Но только число, имеющее определённый атрибут (DevCPS.numtyp), уточняющий, что это число является кодом символа.

Сообшение о языке (КП) тоже не врёт: "Лексемы суть идентификаторы, числа, операции и ограничители". Символьной константы в этом списке нет.
Вобщем, всё сходится.