LINUX.ORG.RU

regexp поиск функций в си коде

 , , ,


0

1

Написал паттерн для поиска функций в си коде.

# This regex pattern take code from each function|search all functions in code
# !!! Last brace "}" mast be stay after "\n" - new string
func = re.compile('[void|int|int*]\s+\w+\s*\([^)]*\)\n*\{(.*?)\n\}', re.DOTALL)  #\([^)]*\) - after bracket may follow any symbol, except "close bracket"

Но что-то не всегда отрабатывает наличие либо его отстутвие новой строки перед открывающей фигурной скобкой. Если не сложно подправьте, чтобы адекватно работало. А то уже глаза замылились_)
Не говорите что парсить си код регулярками не камильфо, пробовал pycparser, flex - либо у меня не задалось, либо неважные библиотеки. Я избрал путь регулярок...



Последнее исправление: wojaovlad (всего исправлений: 2)

!!! Last brace «}» mast be stay after «\n» - new string

А это ещё зачем?

Kilte ★★★★★
()

чтобы адекватно работало

Адекватно это работать не будет.

aedeph_ ★★
()

используй шланг, есть же биндинги для питона.

pon4ik ★★★★★
()

Окей, если функция возвращает не стандартный тип данных? Если используются макросы?

Я не рекомендовал бы писать парсер самостоятельно даже на yacc lex. Разберись с готовыми средствами. clang например. Посмотри на IDE какие-нибудь, как это там реализовано.

И да, я таки скажу что

парсить си код регулярками не камильфо.

Уверен что затраченные усилия на верном пути отобьются в будущем.

anonymous
()
Ответ на: комментарий от Stil

Да по-хорошему там вообще её полностью надо переписать. Проще с библиотеками разобраться.

Kilte ★★★★★
()

если С-шный текст предполагается корректым, то

hint: объявление типов и данных требуют ";" после «}», а функций нет.

традиционно: регулярками это не делается.

MKuznetsov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.