Выделение символов из кодовой базы с помощью Python - PullRequest
5 голосов
/ 13 октября 2010

Учитывая кодовую базу (например, большой проект C или Objective-C), я хотел бы проанализировать файлы исходного кода и выбрать символы, представляющие интерес. Это могут быть объявления классов, имена или типы переменных или имена методов. Есть ли модуль Python, который мог бы помочь мне с этим?

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

спасибо за любые предложения.

------ обновление -----

спасибо за все предложения, безусловно, за многообещающие предложения. Возможен еще один путь: что, если бы мне удалось собрать проект, который я пытался проанализировать. Могут ли символы отладки (dsym) облегчить этот процесс? Я не ищу ничего продвинутого, просто список классов с их именами ивара и методов. На данный момент изучение предлагаемых инструментов синтаксического анализа кажется мне более трудоемким, чем я могу позволить себе инвестировать в этот проект прямо сейчас

Ответы [ 3 ]

5 голосов
/ 13 октября 2010

Regex определенно не является хорошим способом изучения кода языка программирования.Я бы предложил выбрать модуль синтаксического анализа по ссылкам, представленным ниже.Есть несколько инструментов, которые вы могли бы использовать.Все они предоставляют средства для разбора.Вы всегда можете построить свои вещи поверх этого:

pygccxml генерирует описание xml из программных файлов c ++.Это может быть ближе к тому, что вы пытаетесь сделать:

ТакжеПосмотрите на это, оно генерирует дерево классов с возможностью навигации, представляющее структуру классов.

1 голос
/ 13 октября 2010

Наша Поисковая система имеет возможность выбора всех идентификаторов, используя структуру языка (в данном случае она обрабатывает C, но не Цель C). Поисковая система предоставляет интерактивный язык запросов для поиска различных конструкций языка, отображения совпадений и отображения исходного текста, соответствующего совпадениям. Мы собираемся выпустить версию, которая находит определений , а использует , которая будет напрямую выбирать объявления функций / типов / переменных. Это будет считаться «легким».

Это старший брат поисковой системы, DMS Software Reengineeering Toolkit . DMS с C Front End обеспечивает возможность полного анализа кода C и поиска произвольных определений символов. Это будет считаться «тяжелым режимом» в том смысле, что он имеет полный препроцессор и получает информацию об определении абсолютно правильно, а также обеспечивает полный доступ к AST, связанному с именем символа (объявление, функция, typedef, ...).

Это не модули Python, но они обеспечивают точный доступ к информации, которая может представлять интерес.

1 голос
/ 13 октября 2010

Регулярные выражения здесь не подходят. Языки уже имеют определенную грамматику, так что используйте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...