Подтвердить что ты не робот

Является ли код VС++ DOM доступным из VS-аддонов?

Visual Studio IntelliSense для VС++ включает в себя "полный" парсер EDG С++ (также используемый Intel и другими). Так как код С# DOM доступен для аддонов (исправьте меня, если я ошибаюсь), доступен ли код С++ Code DOM? Может ли это использоваться для анализа открытого проекта VС++ в среде VS?

4b9b3361

Ответ 1

Расширение Visual С++ Refactoring позволяет переименовать участника по всему проекту. Его построили MS, но, очевидно, они использовали внутренний код DOM для достижения этого. Так что, возможно, я еще не знаю, как это сделать.

Расширение CppLister может считывать базы данных intellisense, созданные VS, для перечисления различных членов внутри класса.

Вы всегда можете использовать анализатор Clang С++ с открытым исходным кодом (фактически компилятор) и читать AST в С# Object Model. См. CppSharp и ClangSharp для привязок С# к Clang.

Ответ 2

Я не уверен, что такое "С++ Code DOM", если он существует. Важно то, что MSVS использует переднюю часть EDG для анализа и определения значения символов для поддержки действий IDE в MSVS. EDG IIRC создает собственные внутренние структуры данных, представляющие программу; У меня нет оснований полагать, что эти структуры данных являются "С++ Code DOM" или они видны вам или вы сможете узнать о них в MSDN.

Ваша реальная заявленная проблема заключается в том, что вы хотите проанализировать исходный код С++. Я согласен с тем, что информация об интерфейсе EDG будет значительной помощью для этого; вы действительно не хотите пытаться написать свой собственный сингл С++ (и вам нужно много материала после разбора, google мое эссе о "жизни после разбора" ).

Итак, у вас есть следующие варианты:

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