|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.07.2011, 14:12 | #1 |
Пользователь
Регистрация: 27.07.2009
Сообщений: 22
|
Получение всех функций в файле исходного кода
Имеется файл исходного кода - cpp. Как получить из этого файла список всех функций (работаем только на уровне файла - классы и др. не смотрим) c аргументами и возвр. значениями?
И ещё - пусть функция была определена, но как проверить вызывалась ли она когда-нибудь? |
02.07.2011, 14:58 | #2 |
Форумчанин
Регистрация: 02.06.2011
Сообщений: 282
|
руками вытащить и в .h положить, не? или я че то не понял.
по поводу вызывалась или нет, можно завести класс, в котором будут лежать некоторые описатели функций (10 например), и в конце тела каждой функции увеличивать счетчик для конкретной функции, вызывалась она или нет. в начальный момент например пусть счетчик для каждой функции равен нулю. |
02.07.2011, 15:17 | #3 |
Пользователь
Регистрация: 12.06.2008
Сообщений: 76
|
А я так понял, что человек хочет написать анализатор cpp-файла с поиском в нем функций и количества обращений к этим функциям в пределах того же файла...
Последний раз редактировалось Dogmat; 02.07.2011 в 15:22. |
02.07.2011, 15:24 | #4 |
Пользователь
Регистрация: 27.07.2009
Сообщений: 22
|
|
02.07.2011, 15:52 | #5 |
C++
Форумчанин
Регистрация: 27.03.2011
Сообщений: 803
|
Регулярные выражения.
Ищете информацию по C++?
cplusplus.com |
02.07.2011, 15:57 | #6 |
Пользователь
Регистрация: 12.06.2008
Сообщений: 76
|
Ну, мне даже страшно начинать рассуждать на эту тему, боюсь застрять, а мне тут еще свое писать нужно ). А литературу специальную не читали? Наверняка есть.
Ну если погадать, тогда примерно так: Поскольку функции могут быть перегруженными с разным числом параметров, с разными типами этих параметров, то мне видится необходимость предварительно пробежать по файлу и составить таблицу: какого типа и какие переменные в файле присутствуют. Для локально объявленных переменных впределах тел функций могут понадобиться промежуточные таблицы. Нужно это для того, чтобы определять затем в дальнейшем какая функция из перегруженных вызывается и увеличить счетчик числа вызовов. То есть это уже отдельная задача. Сначало составить таблицу глобальных переменных, потом рассматривая реализацию каждой функции составлять таблицу ее локальных переменных и т.д., как только натыкаетесь на вызов некоторой функции проверять по этой таблице какого типа переменные ей были переданы и заносить в таблицу функций эту функцию если ее там еще нет или увеличивать число ее вызовов если она там уже есть. Но это при условии, что все переменные, которые передаются функциям присутствуют в пределах файла, ага, а если с учетом того, что параметр может передаваться по значению, то есть "строка" или число цифрами, то это еще сложнее становится. Учитывая, что в качестве параметров в функции могут быть переданы объекты или указатели на объекты пользовательских типов, задача еще больше усложняется, то есть нужно либо самому вводить ограничения о том, что существуют такие то типы, либо как-то определять определены ли пользовательские типы. Что касается того, как определять является ли некоторая строка описанием функции или ее вызовом, гадать не хочется, наверняка в какой-нибудь литературе описана хотя бы примерная последовательность того, как это делает анализатор. Ну в общем задача на мой взгляд не простая, для меня точно, так с кондачка не скажу. Может кто подскажет человеку литературу по теме? А вообще саму проблему стоило бы уточнить. Если это академическая задача, то наверняка должны существовать какие-то ограничения, чего точно не будет встречаться в файле или что точно должно быть, все ли что в нем попадется будет в нем же объявлено и определено? А потом, что значит классы и другое не смотрим? Ну а если это файл реализации методов класса? Тоже не смотрим? Чем не функция... Последний раз редактировалось Dogmat; 02.07.2011 в 16:00. |
02.07.2011, 15:57 | #7 |
Пользователь
Регистрация: 12.06.2008
Сообщений: 76
|
Регулярные выражения это только инструмент
|
02.07.2011, 16:08 | #8 |
Форумчанин
Регистрация: 02.06.2011
Сообщений: 282
|
зачем такое вообще нужно? задание интересное. могу даже взяться за реализацию параллельно с автором (БЕСПЛАТНО), для себя. действительно, надо точно знать, академическая задача или для широкого пользования. а если составлять таблицы на такой основе: заносим в таблицу "имена" и "аргументы" относящиеся к каждым открывающимся и закрывающимся скобкам. потом фильтровать.
|
02.07.2011, 17:57 | #9 |
Пользователь
Регистрация: 27.07.2009
Сообщений: 22
|
Проблема частично решилась с использованием Doxygen.
|
02.07.2011, 19:28 | #10 |
Пользователь
Регистрация: 12.06.2008
Сообщений: 76
|
Я думал вам задачу решить нужно, Doxygen я вам и так посоветовал бы.
Последний раз редактировалось Dogmat; 02.07.2011 в 19:53. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Компиляция исходного кода | 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 |