Я с большим числом файлов C, которые структурированы следующим принципом:Поиск имен «главных» функций в файле C помощью Bash сценария
- Все функции объявлены в файле C и имеют тип возврата int, double или void.
- Все функции начинаются с «ksz_». Только функции используют это - ничто иное не использует «ksz_» в своих именах.
- Файл содержит "основные" функции. Все поддерживающие функции используют имя своей основной функции, чтобы сформировать себя.
- Потому что они были сделаны разными людьми, они довольно messly сделаны и пробелы, расположенных в различных местах:
rought визуализация будет (обратите внимание на пробелы):
int ksz_Print(...)
{
...
}
void ksz_Print_Helper1 (...){
...
}
void ksz_Print_Helper2(...) {
...
}
int ksz_Input(...){
...
}
double ksz_Input_Helper1 (...){
...
}
мне нужно найдите «основные» имена функций для каждого отдельного файла C, чтобы использовать их для другого алгоритма поиска. Поскольку эти файлы огромны (у них их более десятка тысяч строк), а их сотни, мне нужен сценарий Bash для этого.
В идеале этот сценарий будет извлечь только «основные» функции:
ksz_Print
ksz_Input
Что меня останавливает то, что я не могу думать о Regex моего Grep для извлечения функциональных линий. Я думаю, что его логика должна выглядеть следующим образом:
(пространства) (INT/поплавок/двойной) (пространства) (КСЗ _) (другие characers без пробелов) (пробелы) (открывающая скобка)
После того, что я думаю, Я извлечу слово, содержащее «ksz_» из каждой строки, с cut (после обрезки и удаления дубликатов пробелов).
И, наконец, мне нужно найти способ отфильтровать поддерживающие функции.
Но каков был бы мой первоначальный grep в этом скрипте?
Я боюсь, что это будет очень трудно сделать с регулярными выражениями Рассматривали ли вы используя 'gtags',' ctags' или что-то подобное? –
Что-то вроде 'grep -E '\ b (int | float | double) \ s + ksz_ [A-Za-z0-9] \ s * \ ('' должно вас начать. – coladict
Я думаю, что регулярные выражения способны анализировать только обычные грамматики. В то время как C основан на контекстно-свободной грамматике. –