Я не уверен, что такое «C ++ Code DOM», если он вообще существует. Важно то, что MSVS использует интерфейс EDG для анализа и определения значений символов, чтобы поддерживать действия MSVS IDE. EDG IIRC строит собственные внутренние структуры данных, представляющие программу; У меня нет оснований полагать, что эти структуры данных представляют собой «C ++ Code DOM», или что они видны вам, иначе вы сможете узнать о них в MSDN.
Ваша настоящая заявленная проблема заключается в том, что вы хотите проанализировать исходный код C ++. Я согласен, наличие информации о внешнем интерфейсе EDG было бы значительным подспорьем в этом; вы действительно действительно не хотите пытаться написать свой собственный синтаксический анализатор C ++ (и вам нужно много вещей после синтаксического анализа, погуглите мое эссе на тему «жизнь после синтаксического анализа»).
Итак, у вас есть следующие варианты:
- Найдите дверь в оборудование EDG в MSVS. Поскольку вам не очень повезло, и, похоже, от MS ничего не задокументировано, что это доступно, вам, вероятно, в этом случае не повезет. Если бы я был на месте М.С., я бы не стал обнародовать это; это было бы просто очередной головной болью поддержки, да и то для программы, которая им даже не принадлежит.
- Используйте коммерческий интерфейс EDG напрямую от EDG . Насколько я понимаю, они предлагают лицензии на индивидуальное использование бесплатно. (Мое понимание может быть неправильным). Таким образом, вы пропускаете любые ограничения, которые может иметь MS на доступ ... ценой необходимости самостоятельно настраивать внешний интерфейс EDG. Оборотная сторона: EDG хочет быть интерфейсом компилятора, а не интерфейсом анализатора. Это различие может показаться тонким, но, вероятно, вас укусит. Например, я подозреваю, что EDG отбрасывает комментарии; клиентским интерфейсам компилятора они не нужны. Если вы хотите проверить комментарии в своем анализаторе, это может стать настоящей проблемой.
- Используйте Clang . Это синтаксический анализатор C ++ с открытым исходным кодом, предназначенный для использования в самых разных целях анализа программ, а также для предварительной обработки компилятора C ++. У меня нет опыта в этом, но он кажется довольно хорошо продуманным и, кажется, предлагает множество удобств. Я не знаю, есть ли у него конкретная поддержка диалекта MS C ++.
- Используйте другой коммерческий интерфейс, наш (DMS) C ++ Front End. Как архитектор этого, я почти уверен, что он хорошо продуман (включая поддержку MS Visual C ++); есть конкретный опыт использования этого для выполнения сложных задач анализа и преобразования C ++. В отличие от EDG, он предназначен для поддержки анализа, преобразования и генерации (например, он фиксирует комментарии и даже основание литералов, чтобы их можно было правильно восстановить). Основа, DMS, имеет множество встроенных механизмов для поддержки пользовательского анализа: построение AST и таблиц символов, грамматики атрибутов, структуры потока данных, внутрипроцедурный контроль и анализ потока данных на уровне AST, управление BDD, сопоставление исходных шаблонов, источник для -источников трансформации. Clang и EDG предлагают создание таблиц AST и символов; Clang (но я не думаю, что EDG) имеет анализ потока (на уровне LLVM), но не анализ потока на уровне AST (AFAIK). Ни Clang, ни EDG не предлагают возможности исходного шаблона / преобразования, так что что лучше, зависит от ваших долгосрочных задач. По сравнению с другими вариантами, наш интерфейс на C ++ не является открытым или бесплатным; можно получить лицензии на исследования.