Наш набор инструментов для реинжиниринга программного обеспечения DMS с его C интерфейсом предназначен для этого.
DMS обеспечивает возможность общего анализа и преобразования. C Front End построен поверх DMS, знает много диалектов C, может анализировать их в AST, включая сохранение во многих случаях условного препроцессора.
Затем используется возможность перезаписи DMS для внесения изменений в AST. Вместо того, чтобы непосредственно взламывать узлы дерева, обычно концептуально пишется правило в форме:
if (sourceCodePattern) and condition then replacementCodepattern
, где sourceCodePattern и replaceCodePattern - это фрагменты кода C с переменными заполнителями. Пример:
rule make_autoinc(l: lefthandside, e:expression):statement->statement
" \l = \l + \e ; " -> " \l++; ";
После того, как все ваши правила переписывания были применены, DMS может затем распечатать измененный исходный код обратно в файл, сохранив отступы, радикальные числа, комментарии и т. Д. c как совершенно корректные, компилируемые исходный код.
То, что вы делаете с ним после этого, является вашим бизнесом.
Интерфейс C также может создавать таблицы символов и создавать информацию управления и потока данных, что часто действительно необходимо выполнить желаемые изменения.