Я хочу, чтобы инструмент командной строки извлекал определение или объявление (typedef, structure, enumeration, variable или function) из исходного файла C или С++. Также был бы удобен способ заменить существующее определение/объявление (после преобразования извлеченного определения с помощью представленного пользователем script). Существует ли такой общий инструмент или есть какое-то резонансное приближение такого инструмента?
Скриптивность и способность подключаться к пользовательским скриптам или программам здесь важны, хотя я тоже академически интересуюсь программами GUI. Рекомендуются решения с открытым исходным кодом для лагеря Unix/Linux (хотя мне также интересны инструменты Windows и OS X). Первичные языковые интересы - это C и С++, но более общее решение будет еще лучше (я думаю, нам не нужны сверхточные возможности синтаксического анализа для поиска, извлечения и замены определения в исходном файле программы).
Примеры использования примеров (дополнительно - для любопытного ума):
- Учитывая глубоко вложенные инициализации
struct
и переменные (массивы) этих типов, предположим, что необходимо изменить определение структуры путем добавления или переупорядочения полей или переопределения определений переменных/массивов в более читаемом формате без введения ошибок, возникающих в результате ручной труд. Это будет работать, извлекая старые инициализации, а затем используя script/program, чтобы записать новые инициализации для замены старых. - Для реализации инструмента просмотра кода - извлеките определение.
- Генерация декоративного кода (например, запись/возврат в журнал).
- Структурирование скриптового кода (например, извлечение этой и той вещи и размещение в другом месте без изменений - комментарий фиксации контроля версии может документировать команду для выполнения этой операции, чтобы сделать ее очевидной и проверяемой, что ничего не изменилось).
Альтернативная проблема: Если есть инструмент для определения местоположения определения (для начала и конца строки было бы достаточно - мы могли бы даже предположить, что все определения/декларации, которые нас интересуют, находятся в их собственных line), то это просто упражнение ловкости пальца, чтобы написать программу для
- определения извлечения,
- заменить определения или даже
-
извлеките определение, запустите программу, указанную параметрами командной строки (или редактором), в
- получить требуемые извлеченные определения из
stdin
(или из временного файла), - выполнить преобразование (редактирование) и
- выводить новые определения на
stdout
(или сохранять их в заданный временный файл)
для замены исполняющей программой.
- получить требуемые извлеченные определения из
Таким образом, главная, более сложная задача - найти начальную и конечную строки определения.
Примечание о тегах: Более точный тег, чем code-generation
, будет code-transformation
, но он не существует.