в компиле тебе не надо ничего большого валидировать - у тебя лексер читает входной утф-8 поток и сразу же расставляет спаны, отвалидировать что идентификатор в спане подходит под правила идентификатора - дешево (даже для идентификатора длиной под килобайт, и часто у вас такие попадаются в сорцах?)
Недёшево, вообще недешего. Дело в том что там используется разряженная интервальная таблица которую проходят либо quick search ам или пакуют в в префиксное дерево. В любом случае нужно брать каждый codepoint для идентификатора и искать по этой таблице. При чем таблицы две - одна используется для первого символа, остальная для оставшейся части.