Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Шаблон для поиска в исходника СИ-подобных функций. Какой?
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
Я так понимаю что задачу парсинга исходника с поиском функций простым регкспом не решить. Пробовал так:
$patt = '/([a-z ]*?)(\w+?)\s*(\(.*?\))\s*(\{.*?\})/s';
И вроде бы все хорошо, пока в сорце не встречается определение массива.
Вот такой код
Жадный же поиск запихнет в тело функции все что попало. Регекспом тут не обойтись или можно что-нибудь придумать?
DeepVarvar
Отправлено: 16 Марта, 2015 - 13:54:57
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Тащить жадным, и сматченные куски передавать ниже по цепочке рекурсивно. Но это тоже все Г, самый правильный путь - перебирать посимвольно, индексируя кол-во открытых-закрытых скобок и пр..
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
DeepVarvar пишет:
Тащить жадным, и сматченные куски передавать ниже по цепочке рекурсивно. Но это тоже все Г, самый правильный путь - перебирать посимвольно, индексируя кол-во открытых-закрытых скобок и пр..
А вообще, нахрена?
Например есть несколько версий проекта на С/С++. Нужно показать какие функции менялись, и что в них изменилось.
DeepVarvar
Отправлено: 16 Марта, 2015 - 14:28:56
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
DeepVarvar пишет:
git, tig, svn, trac, redmine... не знакомо?
Нужно локальное решение. Да и со всеми особенностями git и svn я не знаком. А про остальные системы не слышал, лол. Но суть не в этом, а в том что нужно написать скрипт для такой задачи. Верным путем является, значит, индексирование скобок?
DeepVarvar
Отправлено: 16 Марта, 2015 - 14:32:51
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
freelsd пишет:
Ну гиблое не гиблое, может есть решения какие-то готовые?
готовое решение парнсинга функций С/C++ ? Я думаю очень вряд ли! Если вам нужно отслеживать изменения то сказал сказал DeepVarvar git. Создайте локальный репозиторий и заливайте изменения туда, но по-моему git это лучший вариант в данной ситуации, парсить C++ синтаксис это полный бред.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
freelsd
Отправлено: 16 Марта, 2015 - 16:38:59
Гость
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
DeepVarvar пишет:
Выше же ответил.
OrmaJever пишет:
готовое решение парнсинга функций С/C++ ? Я думаю очень вряд ли! Если вам нужно отслеживать изменения то сказал сказал DeepVarvar git. Создайте локальный репозиторий и заливайте изменения туда, но по-моему git это лучший вариант в данной ситуации, парсить C++ синтаксис это полный бред.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.