Наш C ++ Front End способен анализировать различные диалекты C ++ (ANSI, GCC, MSVS), автоматически создает AST, чьи узлы помечены точными исходными позициями и украшены любым близким текстом комментария, и строит полную таблицу символов. (РЕДАКТИРОВАТЬ, январь 2013 г .: интерфейс C ++ уже довольно давно может обрабатывать C ++ 11).
Внешний интерфейс C ++ построен на основе нашего DMS Software Reengineering Toolkit , обобщенной технологии компиляции для анализа и преобразования программ, предназначенной для поддержки создания пользовательских инструментов. Интерфейс C ++ включает препроцессор, в котором директивы препроцессора могут быть расширены или не коллективно или индивидуально, в зависимости от задачи. Он также включает в себя полную символьную конструкцию со всеми мерзкими поисками Кенига.
DMS принимает явные определения языка (именно так он понимает C ++; есть также внешние интерфейсы для C, C #, Java, COBOL и множества других языков). DMS обеспечивает общий синтаксический анализ, построение таблицы символов, механизм анализа потоков, процедурные API-интерфейсы для навигации / проверки / модификации дерева, преобразования источника в источник и восстановления текста AST в источник, включая исходные комментарии, числа и т. Д. эти возможности доступны для использования интерфейсом C ++.
DMS также предназначен для работы с масштабами, необходимыми для серьезных задач. Часто вам нужен не просто один модуль компиляции (что GCC даст вам в лучшем случае), но и доступ ко всему набору. DMS использовался для анализа / преобразования тысяч модулей компиляции C ++ и буквально десятков тысяч модулей компиляции C (в приложении на 25 миллионов строк).
«Простая в использовании библиотека» - оксюморон, когда дело доходит до инструментов манипулирования программой. Сами языки являются сложными (C ++ является одним из самых сложных и ухудшается с C ++ 0X), и это вызывает сложность в природе вопросов, которые вы можете задать, и как выглядят ответы (например, «есть ли какие-либо экземпляры шаблона, которые может изменить локальную переменную X в методе Y в классе C в любом пространстве имен N? "). Сами вопросы сложны.
Вам нужна библиотека со необходимой сложностью, чтобы вы могли выполнять свою задачу. В течение последних 15 лет DMS постоянно совершенствуется, чтобы обеспечить необходимую сложность. Если вы хотите выполнить серьезную обработку программы, я утверждаю, что вам понадобится эта информация.
В качестве доказательства DMS была использована для проведения масштабного автоматизированного реинжиниринга программного обеспечения для авионики миссии на основе C ++ для Boeing. Я не верю, что есть другие инструменты, которые могут это сделать. (Clang, похоже, пытается, но только для C ++. YMMV).