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





Некоторые из доступных методов:
В качестве альтернативы вы можете написать свой собственный, используя lex и yacc (или их родственников и bison), используя публичные спецификация lex и грамматика yacc.
Возможно, перебор, но есть полный анализатор 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/?
См. Также: code.google.com/p/pycparser