извлечь список функций в заголовочном файле

0

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

Идея состоит в том, чтобы создать список всех функций в файле, чтобы попасть в файл CSV или Excel. Я хотел бы иметь на каждой строке:

Имя файла заголовка; Только имя функции; Полная подпись функции; Комментарии в коде для этой функции

Пример (из файла someHeader.h):

// This is the multi-line
// comment for the DoSomething function.
void            DoSomething (int CleverParameter);

превратился в

someHeader.h;DoSomething;void DoSomething (int CleverParameter);This is the multi-line comment for the DoSomething function.

Мне не нужны умные синтаксические разборки и разрешение типа/зависимости или такие вещи. У меня есть VisualStudio 2010 и 2012 у меня в руках. Также не бойтесь Linux или Windows-инструментов командной строки. Если пробелы будут очищены в процессе, это будет здорово.

  • 2
    Если вам не нужен точный ответ, то регулярное выражение подойдет как угодно (например, плохо). В противном случае вы обнаружите, что для извлечения таких определений функций вам нужен полный препроцессор для разрешения макросов и условных выражений (возможно, вы можете сначала запустить заголовок через препроцессор, чтобы решить эту проблему). Несмотря на это, синтаксис C ++ является достаточно загадочным (а вариант MS хуже из-за его 30-летней истории), поэтому любое неумное решение для анализа, которое вы выберете, получит ложные отрицания и ложные срабатывания.
  • 0
    Вы говорите, что не боитесь Linux. Я не знаю, как вы будете перебрасывать свой код между Windows и Linux, но если вы можете сделать это между двумя довольно легко и не обращайте внимания, взгляните на 'lex'. Я уверен, что вы можете найти предопределенные сканеры для C / C ++.
Показать ещё 2 комментария
Теги:
parsing
header-files

2 ответа

1
Лучший ответ

Написание достойного анализатора C++ будет непростой задачей.

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

  • Используйте Doxygen для создания XML-вывода, содержащего все определения и комментарии функций
  • Используйте таблицу стилей XSLT или синтаксический анализатор XML для создания файла CSV

Это не идеальное решение, но это определенно будет более надежным, чем подход с регулярным выражением, и не потребует большого количества кода, чтобы заставить его работать.

  • 1
    «Не будет легко» - преуменьшение года. Мы непрерывно работаем над нашим уже около 5 лет. Doxygen работоспособен, но не точен, просто потому что он не настоящий синтаксический анализатор C ++. Это, вероятно, лучше, чем решение регулярных выражений.
  • 0
    Подход кислорода довольно близок. Поскольку сейчас у меня нет времени, чтобы достаточно узнать о постобработке XML, я просто прямо скопирую вещи из вывода HTML. Большое спасибо!
0

Вы также можете использовать библиотеки Boost для этой цели.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню