Только для Windows, но не для FOSS, но вы сказали «в любом направлении ...»
Наш набор инструментов для реинжиниринга программного обеспечения DMS " с C интерфейсом применять преобразования к исходному коду C. DMS можно настроить для выполнения нестандартных, сложных надежных преобразований, хотя конфигурация не так проста, как ввод простой команды, такой как "refactor frazzle by doobaz".
Одним из главных камней преткновения остается препроцессор. DMS может преобразовывать код, имеющий директивы препроцессора в типичных местах (вокруг операторов, выражений, заголовков цикла if / for / while, объявлений и т. Д.), Но другие «неструктурированные условия»Это может вызвать проблемы. Вы можете запустить DMS, расширив директивы препроцессора из существования, или, что еще важнее, расширив те, которые доставляют ему проблемы, но в основном людям это не нравится, потому что они предпочитают хранить свои директивы препроцессора.не совершенны.
[Другой ответ предложил Concinelle, который выглядитдовольно хорошо с моей точки зрения.Насколько я знаю, он вообще не обрабатывает директивы препроцессора;Я могу ошибаться, и он может обрабатывать некоторые случаи, как это делает DMS, но я уверен, что он не может обработать все случаи].
Вы не хотите рассматривать свои собственные.Создать инструмент трансформации / рефакторинга гораздо сложнее, чем вы могли догадаться, никогда не пробовав его.Вам нужны полные, точные парсеры для интересующего диалекта (C), и это довольно сложно сделать правильно.Вам нужен препроцессор, таблицы символов, анализ потока, преобразование, механизм регенерации кода, ... на то, чтобы построить и получить правильные вещи, требуются годы усилий.Поверь мне, был там, сделал это.