Наш C ++ интерфейс способен анализировать многие диалекты C ++, включая GNU и MS.Он строит структуры данных компилятора для AST и таблиц символов с видом информации, необходимой для «отражения» в C ++.Довольно просто экспортировать дерево разбора в виде XML-документа.Информация о таблице символов может быть экспортирована в виде XML путем обхода структуры символов.
Кажется, что люди всегда хотят получить данные таблицы AST и символов в формате XML, я предполагаю, что они могут прочитать их в структуру DOMили манипулировать им с помощью XSLT.У этой идеи есть два серьезных недостатка: 1) огромный объем XML-данных огромен, а его создание / перечитывание просто добавляет много времени 2) что наличие этих структур сделает «легким» сделать ... что-то....
Мы думаем, что люди действительно хотят анализировать код и / или преобразовывать код (обычно на основе анализа).Для этого необходимо, чтобы инструмент, каким бы он ни был, предоставлял доступ к структуре программы таким образом, чтобы его было «легче» анализировать и, ну, в общем, преобразовывать.Например, если вы решите изменить AST, как вы будете восстанавливать исходный текст?
Мы создали DMS Software Reengineering Toolkit , чтобы обеспечить именно такую поддержку общего назначения для анализа, анализа, преобразования, prettyprint («регенерировать источник»).DMS имеет внешние интерфейсы для широкого спектра языков (C ++, C, Java, COBOL, Python, ...) и предоставляет набор стандартных сервисов, полезных для создания пользовательских анализаторов / преобразований в коде.Рискуя быть смелым, мы долго размышляли о реализации полезных механизмов для решения этого набора задач, так же как MS потратила много времени на определение того, что должно быть в Windows.Вы можете попытаться повторить этот механизм, но ожидайте, что это будет огромной ценой (мы работали над DMS в течение 15 лет), или вы можете закрыть глаза и притвориться, что вы можете взломать вместе достаточно, чтобы сделать то, что, по вашему мнению, вам нужно сделать (в основном вы обнаружите, что на практике этого недостаточно).
Из-за этой общей потребности в "службах манипулирования программами" наш клиентский интерфейс C ++ размещается поверх DMS.
DMS с внешним интерфейсом C ++ использовались для создания различных стандартных инструментов разработки программного обеспечения (тестирование, профилировщики), а также для внесения значительных изменений в код (на веб-сайте есть статья о том, как DMS использовалась для массовой перестройки архитектуры).программное обеспечение полета самолета).
РЕДАКТИРОВАНИЕ 7/7/2014: наш интерфейс теперь обрабатывает полный C ++ 11 и части C ++ 14, включая управление и поток данных для функций / процедур / методов.