Сценарий Python для печати всех функциональных определений файла C/C++

Я соглашаюсь с Ben. Это точно , для чего Связка ключей.

я не был бы, при любых обстоятельствах просто хранят пароли в значениях по умолчанию, как dbr предполагает. Это очень небезопасно. Вы по существу храните свои пароли в открытую.

В дополнение к примеру кода Apple, я также рекомендую код Связки ключей Buzz Anderson: iPhone Keychain Code

7
задан dbr 25 October 2009 в 14:09
поделиться

4 ответа

Я бы предложил использовать инструмент PLY lex / yacc. Есть готовый синтаксический анализатор C, и сам синтаксический анализатор работает довольно быстро. После анализа файла найти все функции будет несложно.

http://www.dabeaz.com/ply/

3
ответ дан 7 December 2019 в 07:47
поделиться

antlr - ваш инструмент

2
ответ дан 7 December 2019 в 07:47
поделиться

Чтобы сделать это надежно, вам нужно проанализировать код C или C ++, а затем получить определения функций из AST, созданного парсером.

C довольно легко анализировать. Как упоминает pavpanchekha , синтаксический анализатор PLY поставляется с синтаксическим анализатором C и использовался для создания следующих соответствующих проектов:

Анализ кода C ++ сложнее .. «Есть ли хорошая библиотека Python, которая может анализировать C ++» должна помочь:

C ++, как известно, сложен для синтаксического анализа. Большинство людей, которые пытаются сделать это правильно, в конечном итоге разбирают компилятор. Фактически (отчасти) именно поэтому LLVM был запущен: Apple требовался способ, которым они могли бы анализировать C ++ для использования в XCode, который соответствовал бы способу его анализа компилятором.

Это ' s почему существуют такие проекты, как GCC_XML , которые вы могли бы объединить с xml-библиотекой python.

Наконец, если ваш код вообще не должен быть надежным, вы можете запускать его через код: форматирование, например indent (для кода C), чтобы выровнять вещи, а затем использовать регулярные выражения для соответствия определению функции. Да, это плохая, взломанная, подверженная ошибкам идея, и вы, вероятно, найдете определения функций в многострочных комментариях и тому подобном, но она может работать достаточно хорошо ..

1
ответ дан 7 December 2019 в 07:47
поделиться

На этой странице, Анализ C ++ , упоминается пара грамматик ANTLR для C ++. Поскольку ANTLR имеет Python API , это кажется разумным способом продолжить.

Хотя синтаксический анализ может показаться намного более сложным, чем регулярные выражения, это тот случай, когда кто-то другой сделал почти всю работу для вас, и вам просто нужно подключиться к нему из Python.

Другой альтернативой, когда кто-то другой сделал работу по синтаксическому анализу C ++ за вас, является pygccxml , который использует GCCXML , расширение вывода для GCC для создания XML из внутреннего представления компилятора. Поскольку Python имеет отличную поддержку XML, вам просто нужно извлечь интересующую вас информацию.

1
ответ дан 7 December 2019 в 07:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: