Разобрать файлы C

Я ищу библиотеку на базе Windows, которую можно использовать для разбора кучи файлов C для перечисления глобальных и локальных переменных. Глобальные и локальные переменные могут быть объявлены с помощью typedef. Выходные данные (т.е. список глобальных и локальных переменных) можно затем использовать для постобработки (например, для замены имен переменных новым именем).

Доступна ли такая библиотека?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
5 129
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

Некоторые из доступных методов:

В качестве альтернативы вы можете написать свой собственный, используя lex и yacc (или их родственников и bison), используя публичные спецификация lex и грамматика yacc.

См. Также: code.google.com/p/pycparser

Jouni K. Seppänen 17.11.2008 20:56

Возможно, перебор, но есть полный анализатор ANSI C, написанный с помощью Boost.Spirit: http://spirit.sourceforge.net/repository/applications/c.zip

Возможно, вы сможете смоделировать его под свои нужды.

Не знаю, есть ли там библиотека, но взгляните на CTAGS.

Если это простой C, lex и yacc - ваши друзья, но вам нужно принять во внимание препроцессор C - исходные файлы с нерасширенными макросами обычно не соответствуют синтаксису C, поэтому синтаксический анализатор, написанный с учетом грамматики K&R, скорее всего, не сработает .

Если вы решите проанализировать вывод препроцессора, будьте готовы к тому, что ваш анализатор выйдет из строя из-за «расширений» вашего конкретного компилятора, потому что, скорее всего, их используют заголовки стандартных библиотек. По крайней мере, так обстоит дело с GCC.

У меня было это с GCC, и я, наконец, решил достичь своей цели, используя другой подход. Если вам просто нужно изменить имена переменных, подойдут регулярные выражения, и нет необходимости создавать полный парсер, IMHO. Если ваша цель - просто собрать данные, конечным источником данных является отладочная информация. Есть способы получить отладочную информацию из двоичного кода - для исполняемых файлов ELF с DWARF есть libdwarf, для Windows-land (COFF?) Тоже должно быть что-то. Вероятно, вы можете использовать некоторые существующие инструменты для получения отладочной информации о двоичных файлах - опять же, я ничего не знаю о Windows, вам нужно исследовать.

Недавно я прочитал о системе на основе win32, которая просматривала отладочную информацию в файлах DLL COFF: http://www.drizzle.com/~scottb/gdc/fubi-paper.htm

Анализировать C намного сложнее, чем кажется, когда вы берете учтите разные диалекты, директивы препроцессора, необходимость информации о типе при парсинге и т. д. Люди, которые говорят вам "просто используйте lex и yacc", имеют явно не сделал производственный синтаксический анализатор C.

Инструмент, который может это сделать, - это наш C передняя часть.

Он решает все вышеперечисленные проблемы.

По завершении он имеет полную таблицу символов с возможностью навигации. со всеми идентификаторами и соответствующей информацией о типе. При этом перечисление глобальных и локальных переменных было бы тривиальным делом.

Я архитектор семантических дизайнов.

Может быть, gnu project cflow http://www.gnu.org/software/cflow/?

Другие вопросы по теме