Программный анализ и редактирование исходных файлов C ++ - PullRequest
5 голосов
/ 16 ноября 2009

Я хочу программно анализировать и редактировать исходные файлы C ++. Мне нужно изменить / добавить код в определенных разделах кода (то есть в функциях, блоках классов и т. Д.). Я также (желательно) также смогу получить комментарии.

Часть того, что я хочу сделать, можно объяснить следующим фрагментом кода:

CPlusPlusSourceParser cp = new CPlusPlusSourceParser(“x.cpp”);  // Create C++ Source Parser Object
CPlusPlusSourceFunction[] funcs = cp.getFunctions();  // Get all the functions

for (int i = 0; i &lt funcs.length; i++) {  // Loop through all functions
    funcs[i].append(/* … code I want to append …*/);  // Append some code to function 
}
cp.save(); // Save new source
cp.close(); // Close file

Как я могу это сделать?

Я бы хотел сделать это предпочтительно на Java, C ++, Perl, Python или C #. Тем не менее, я открыт для API других языков.

Ответы [ 7 ]

4 голосов
/ 16 ноября 2009

Это похоже на AST из кода C

Если вам удобно с Java, antlr может легко разобрать ваш код в абстрактном синтаксическом дереве, а затем применить преобразование к этому дереву. Преобразование AST по умолчанию - просто распечатать исходный источник.

2 голосов
/ 02 апреля 2010

A надежный синтаксический анализатор C ++ доступен с нашим DMS Software Reingineering Toolkit . Он анализирует различные диалекты C ++, включая ANSI, GNU 3/4, MSVS6 и MSVisual Studio 2005 и управляемый C ++.

Он строит AST и таблицы символов (последняя сложнее, чем вы думаете). Вы можете перемещаться по AST, преобразовывать их в различные действующие программы на C ++ и создавать новый код, включая комментарии.

2 голосов
/ 16 ноября 2009

Вам нужна рабочая грамматика и синтаксический анализатор для C ++, который, однако, не слишком прост, так как этот не может быть создан с большинством генераторов синтаксического анализатора . Но если у вас есть синтаксический анализатор, вы фактически можете взять абстрактное синтаксическое дерево программы и изменить его практически любым желаемым способом.

2 голосов
/ 16 ноября 2009

Вы можете использовать любой инструмент генератора синтаксических анализаторов для генерации синтаксического анализатора c ++ для вас, но сначала вам нужно получить CFG (контекстно-свободную грамматику) для C ++, отметьте Antlr

Edit:

Также Antlr поддерживает множество целевых языков

1 голос
/ 16 ноября 2009

В C # - или общем .net - подходе вы могли бы получить некоторую пользу от C ++ / CLI CodeDOM провайдера - не используя версию C ++ этого типа, Я не знаю, насколько хорошо он будет обрабатывать код, который тяжелый шаблон.

1 голос
/ 16 ноября 2009

В проекте Mozilla есть инструмент, который делает это .


Статический анализатор Clang теперь несколько известен тем, что хорошо выполняет анализ и переписывает C ++. Страуструп написал статью об исследовательском проекте в Texas A & M, но я не думаю, что он был выпущен.

1 голос
/ 16 ноября 2009

взгляните на проект doxygen , проект с открытым исходным кодом, для анализа и документирования нескольких языков программирования, включая C ++. Я верю, что использование лексера этого проекта даст вам более половины пути

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...