Repolode
eliben

eliben/pycparser

Полноценный парсер C99/C11 на чистом Python: строит AST исходного кода на C и не требует внешних зависимостей.

Звёзды
3,577
Форки
657
Открытые issues
19
Последний коммит
19 часов назад

Что это?

pycparser разбирает исходный код на C и строит абстрактное синтаксическое дерево (AST), которое программы на Python могут обходить и изменять. Парсер следует грамматике C из приложения A стандарта C99 и стремится поддерживать C11; поддержку C23 можно включить настройкой диалекта. Проект написан на чистом Python и зависит только от интерпретатора, поэтому легко устанавливается через pip.

Код на C обычно нужно предварительно обработать, поэтому pycparser умеет вызывать внешний препроцессор, например cpp, gcc -E или clang -E, через функцию parse_file либо принимать уже обработанный код. В комплект также входят минимальные заглушки заголовков стандартной библиотеки в utils/fake_libc_include — они ускоряют разбор файлов, подключающих системные заголовки.

Проект широко используется как компонент других инструментов. Самый известный пример — библиотека cffi, которая использует pycparser для чтения объявлений функций и типов на C.

Ключевые возможности

  • 01Разбирает код на C99 и C11; поддержку C23 можно включить параметром диалекта.
  • 02Написан на чистом Python и не требует внешних зависимостей.
  • 03Строит AST; типы узлов описаны в _c_ast.cfg.
  • 04Работает с внешними препроцессорами, например cpp, gcc -E или clang -E.
  • 05Включает минимальные заглушки заголовков libc, ускоряющие разбор кода со стандартными директивами include.

Сценарии использования

  • Создание статических анализаторов и линтеров для кода на C.
  • Разработка преобразователей исходного кода или обфускаторов для C.
  • Добавление собственных расширений языка C путём переписывания AST.
  • Генерация FFI-привязок по объявлениям из заголовков C, как это делает cffi.

Быстрый старт

  1. 1

    Установите pycparser с помощью pip

    pip install pycparser
  2. 2

    Посмотрите примеры использования в каталоге examples

Что важно знать

  • Для разбора большей части реалистичного кода на C требуется внешний препроцессор C (cpp, gcc -E или clang -E).
  • В README не указано, какие стандартные заголовочные файлы входят в пакет pip; заголовки fake libc в него не включены.

Темы

Частые вопросы

Что такое pycparser?
Полноценный парсер C99/C11 на чистом Python: строит AST исходного кода на C и не требует внешних зависимостей. pycparser разбирает исходный код на C и строит абстрактное синтаксическое дерево (AST), которое программы на Python могут обходить и изменять. Парсер следует грамматике C из приложения A стандарта C99 и стремится поддерживать C11; поддержку C23 можно включить настройкой диалекта. Проект написан на чистом Python и зависит только от интерпретатора, поэтому легко устанавливается через pip.
pycparser можно использовать бесплатно? Какая у него лицензия?
pycparser распространяется с открытым исходным кодом под лицензией Other. Перед использованием в коммерческих продуктах проверьте условия лицензии.
pycparser всё ещё поддерживается?
Активно поддерживается. Последний коммит в pycparser — 19 окт. 2026 г..
Для чего можно использовать pycparser?
Создание статических анализаторов и линтеров для кода на C. Разработка преобразователей исходного кода или обфускаторов для C. Добавление собственных расширений языка C путём переписывания AST. Генерация FFI-привязок по объявлениям из заголовков C, как это делает cffi.
Как установить pycparser?
Установите pycparser с помощью pip: pip install pycparser Посмотрите примеры использования в каталоге examples
Где скачать pycparser?
Исходный код и инструкции по установке — на GitHub: https://github.com/eliben/pycparser

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты

Быстрый CLI-инструмент статического анализа с открытым исходным кодом: находит ошибки и проверяет соблюдение стандартов с помощью похожих на код шаблонов, а не regex или AST.

17,1 тыс.1,1 тыс.CLGPL-2.1Обновлён 8 часов назад

Компактная библиотека на C++ для передачи небольших объёмов данных между устройствами с помощью звука; доступна для Python, JavaScript и микроконтроллеров.

7,9 тыс.479C++MITОбновлён 6 месяцев назад