Я сомневаюсь, что вы найдете такой инструмент в продаже. Итак, вам нужен специальный инструмент. Ты не
хочу попробовать сделать это с помощью некоторого метода взлома строк (например, Perl), потому что детали точно
Парсинг C и C ++ намного превосходит то, что вы можете надежно сделать таким образом. Если ты не возражаешь
Взлом строк, иногда повреждающий ваши файлы, может быть, вы можете обойтись без этого.
Моя компания DMS Software Reengineering Toolkit может быть использована для этого надежно по модулю предостережения.
DMS - это универсальный движок для анализа, анализа и преобразования исходного кода с использованием технологии компилятора, параметризованной явными определениями языка. DMS имеет надежные определения языков для многих языков,
в том числе C и C ++ в различных диалектах. Используя внешние интерфейсы DMS C или C ++, вы можете разобрать исходный код
код, создавать структуры данных компилятора, называемые AST, выполнять анализ кода, преобразовывать AST,
а затем повторно скомпилировать код, включая комментарии и все директивы препроцессора.
Предупреждение касается синтаксического анализа исходного кода, содержащего директивы препроцессора:
они должны быть хорошо структурированы [например, #ifdef #endif должен вкладываться в другие операторы, как обычные
если и т. д. в отличие от использования через границу оператора. Это происходит в коде C; много
меньше в коде C ++. Наш опыт показывает, что если вы хотите немного изменить свой код на C,
Вы можете решить эту конкретную проблему.
Для вашей конкретной задачи вы делаете в значительной степени ответ, описанный для Scientific Toolworks:
- Выберите единицу компиляции и проанализируйте ее с помощью DMS. Вы должны предоставить все ту же информацию
Вы предоставляете компилятор, чтобы он мог найти заголовочные файлы и т. д.
- DMS создает AST как для вашего модуля компиляции, так и для всех заголовочных файлов.
- Пройдите AST, чтобы извлечь порядок объявлений в заголовках и модуле компиляции.
- Реструктурировать дерево модулей компиляции в соответствии с порядком, полученным из 3)
- Prettyprint полученный модуль компиляции AST
[Причина, по которой это делается с помощью DMS, а не Scientific Toolworks, заключается в том, что DMS предназначена для
анализировать / преобразовывать / восстанавливать код, тогда как SciTool IMHO действительно предназначен только для анализа
и проанализировать. DMS предоставляет доступ к мелким деталям, необходимым для преобразования, которое
SciTools нет, по крайней мере, не в последний раз, когда я смотрел].
Осложнения будут возникать из-за условных выражений, макросов, пространств имен, ... но вы должны будете решить политику
для разрешения. Например, если заголовочный файл имеет #if ... #else .... #endif и объявления
в предложении then другой порядок, чем в предложении else, каков желаемый порядок?
Что если определение функции создается макросом в заголовке? Но все это то, что делает
строим настоящий инструмент, э-э, весело.
Мое личное мнение таково, что это довольно большая работа для эффекта, который вы получаете. если ты
делать все это, насколько лучше будет ваш процесс разработки программного обеспечения? Мы обычно используем DMS
проверить на наличие ошибок кодирования или изменить код так, как это делают люди (например, вставить инструментарий во время выполнения)
временно или AOP-подобный совет), где ясно, что механический двигатель имеет выгоду.