@true_grue Спасибо за наводку на CompCert, я про него то ли не знал, то ли забыл. Полистал исходники — у меня сложилось впечатление, что там вполне себе классический lexer-hack (Lexer.mll мудрит с таблицей символов и решает, какой токен вернуть парсеру: VAR_NAME, TYPEDEF_NAME или OTHER_NAME), но я не углублялся. А так-то да, альтернативы lexer-hack-у есть, об одной из них я писал выше — парсить "обобщённую" КС-грамматику, а потом разбираться в parse tree с узлами типа "объявление переменной или выражение".