Стандартный способ - использовать дуэт Yacc / Lex;второй создает код, который разбивает код на токены, сначала создает код, который преобразует поток токенов в некоторую желаемую структуру.
Существует также более заманчивая опция, Ragel .Здесь вы просто пишете большую структуру, подобную регулярному выражению, способную сопоставлять весь файл, и определяете ловушки, которые будут срабатывать при совпадении определенного подшаблона.