Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2011, 14:12   #1
kleric
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 22
По умолчанию Получение всех функций в файле исходного кода

Имеется файл исходного кода - cpp. Как получить из этого файла список всех функций (работаем только на уровне файла - классы и др. не смотрим) c аргументами и возвр. значениями?
И ещё - пусть функция была определена, но как проверить вызывалась ли она когда-нибудь?
kleric вне форума Ответить с цитированием
Старый 02.07.2011, 14:58   #2
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

руками вытащить и в .h положить, не? или я че то не понял.
по поводу вызывалась или нет, можно завести класс, в котором будут лежать некоторые описатели функций (10 например), и в конце тела каждой функции увеличивать счетчик для конкретной функции, вызывалась она или нет. в начальный момент например пусть счетчик для каждой функции равен нулю.
Kukurudza вне форума Ответить с цитированием
Старый 02.07.2011, 15:17   #3
Dogmat
Пользователь
 
Регистрация: 12.06.2008
Сообщений: 76
По умолчанию

А я так понял, что человек хочет написать анализатор cpp-файла с поиском в нем функций и количества обращений к этим функциям в пределах того же файла...

Последний раз редактировалось Dogmat; 02.07.2011 в 15:22.
Dogmat вне форума Ответить с цитированием
Старый 02.07.2011, 15:24   #4
kleric
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Dogmat Посмотреть сообщение
А я так понял, что человек хочет написать анализатор cpp-файла с поиском в нем функций и количества обращений к этим функциям в пределах того же файла...
Оно самое... ))
kleric вне форума Ответить с цитированием
Старый 02.07.2011, 15:52   #5
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Регулярные выражения.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 02.07.2011, 15:57   #6
Dogmat
Пользователь
 
Регистрация: 12.06.2008
Сообщений: 76
По умолчанию

Ну, мне даже страшно начинать рассуждать на эту тему, боюсь застрять, а мне тут еще свое писать нужно ). А литературу специальную не читали? Наверняка есть.

Ну если погадать, тогда примерно так:
Поскольку функции могут быть перегруженными с разным числом параметров, с разными типами этих параметров, то мне видится необходимость предварительно пробежать по файлу и составить таблицу: какого типа и какие переменные в файле присутствуют. Для локально объявленных переменных впределах тел функций могут понадобиться промежуточные таблицы. Нужно это для того, чтобы определять затем в дальнейшем какая функция из перегруженных вызывается и увеличить счетчик числа вызовов. То есть это уже отдельная задача.
Сначало составить таблицу глобальных переменных, потом рассматривая реализацию каждой функции составлять таблицу ее локальных переменных и т.д., как только натыкаетесь на вызов некоторой функции проверять по этой таблице какого типа переменные ей были переданы и заносить в таблицу функций эту функцию если ее там еще нет или увеличивать число ее вызовов если она там уже есть. Но это при условии, что все переменные, которые передаются функциям присутствуют в пределах файла, ага, а если с учетом того, что параметр может передаваться по значению, то есть "строка" или число цифрами, то это еще сложнее становится. Учитывая, что в качестве параметров в функции могут быть переданы объекты или указатели на объекты пользовательских типов, задача еще больше усложняется, то есть нужно либо самому вводить ограничения о том, что существуют такие то типы, либо как-то определять определены ли пользовательские типы. Что касается того, как определять является ли некоторая строка описанием функции или ее вызовом, гадать не хочется, наверняка в какой-нибудь литературе описана хотя бы примерная последовательность того, как это делает анализатор. Ну в общем задача на мой взгляд не простая, для меня точно, так с кондачка не скажу.

Может кто подскажет человеку литературу по теме?
А вообще саму проблему стоило бы уточнить.
Если это академическая задача, то наверняка должны существовать какие-то ограничения, чего точно не будет встречаться в файле или что точно должно быть, все ли что в нем попадется будет в нем же объявлено и определено? А потом, что значит классы и другое не смотрим? Ну а если это файл реализации методов класса? Тоже не смотрим? Чем не функция...

Последний раз редактировалось Dogmat; 02.07.2011 в 16:00.
Dogmat вне форума Ответить с цитированием
Старый 02.07.2011, 15:57   #7
Dogmat
Пользователь
 
Регистрация: 12.06.2008
Сообщений: 76
По умолчанию

Регулярные выражения это только инструмент
Dogmat вне форума Ответить с цитированием
Старый 02.07.2011, 16:08   #8
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

зачем такое вообще нужно? задание интересное. могу даже взяться за реализацию параллельно с автором (БЕСПЛАТНО), для себя. действительно, надо точно знать, академическая задача или для широкого пользования. а если составлять таблицы на такой основе: заносим в таблицу "имена" и "аргументы" относящиеся к каждым открывающимся и закрывающимся скобкам. потом фильтровать.
Kukurudza вне форума Ответить с цитированием
Старый 02.07.2011, 17:57   #9
kleric
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 22
По умолчанию

Проблема частично решилась с использованием Doxygen.
kleric вне форума Ответить с цитированием
Старый 02.07.2011, 19:28   #10
Dogmat
Пользователь
 
Регистрация: 12.06.2008
Сообщений: 76
По умолчанию

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

Последний раз редактировалось Dogmat; 02.07.2011 в 19:53.
Dogmat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компиляция исходного кода vitekrock Общие вопросы по Java, Java SE, Kotlin 5 05.12.2010 21:24
получение исходного кода и удаление строки shanluu Работа с сетью в Delphi 3 17.10.2010 21:18
получение серого изображения из исходного DeDoK Общие вопросы Delphi 15 10.09.2010 11:45
Анализ исходного кода heart Безопасность, Шифрование 7 31.12.2009 08:26
Анализ исходного кода SwitchMan Паскаль, Turbo Pascal, PascalABC.NET 1 25.04.2009 18:14