Наш инструментарий реинжиниринга программного обеспечения DMS может анализировать код C, C ++, Java и Ada (не Objective C в настоящее время) в широком спектре диалектов и выполнять преобразования в коде. Внешние интерфейсы DMS C и C ++ включают препроцессор, поэтому вы можете вызвать предварительную обработку перед анализом.
Я, вероятно, не понимаю, что вы хотите сделать, потому что кажется странным переименовывать каждую функцию и (глобальную?) Переменную с префиксом "My ....". Но вы могли бы сделать это с некоторыми правилами DMS (грубый набросок переименований пользовательских функций для GCC3:
domain C~GCC3.
rule rewrite_function_names(t: type_designator, i: IDENTIFIER, p: parameter_list, s: statements):
function_header->functionheader
"\t \i(\p) { \s } " -> "\t \renamed\(\i\) (\p) { \s }" ;
и вспомогательная функция «переименовывает», которая принимает узел дерева, содержащий идентификатор, и возвращает узел дерева с переименованным идентификатором.
Поскольку шаблоны DMS совпадают только с деревьями разбора, вы не получите ложных срабатываний.
Вам потребуются некоторые дополнительные шаблоны для обработки различных синтаксических случаев в каждом языке (например, для C, возвращаемый тип «void», потому что «void» не является указателем типа в синтаксисе и объявлениями глобальных переменных) и разные правила для разных языков (синтаксис Ada отличается от синтаксиса языка C).
Это может показаться большим ударом для вашей задачи, но если вы действительно настаиваете на том, чтобы делать это для различных языков надежным способом, то, похоже, трудно избежать проблемы получения достойных парсеров для всех этих языков. (И если вы действительно собираетесь сделать это для всех этих языков, DMS можно научить работать с ObjectiveC так же, как мы учили его для других языков).
Ваша альтернатива - какое-то решение для взлома строк, которое может работать 95% времени. Если вы можете жить с этим, то Perl или что-то подобное, скорее всего, ваш ответ.