Доступна ли DOM кода VC ++ из надстроек VS?

100

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

Вспышка
источник
25
Только что пришел из другой вашей беседы ; Это хороший вопрос.
Qix - МОНИКА БЫЛА ОФИЦИАЛЬНЫМ ОБРАЩЕНИЕМ
81
Опять "непонятно, о чем вы спрашиваете?" - действительно люди? «Я ничего не знаю о посылке этого вопроса» не означает «Неясно, о чем вы спрашиваете».
Тим Пост
9
@Dave - Я добавил ответ, чтобы доказать, что не сотрудники MS тоже могут решить эту проблему. Есть люди, которые сделали то, что я хочу.
TheFlash
55
@DaveHillier Если это по теме, то здесь приветствуются. Помимо этого, нет никаких дискуссий. Если мы начнем говорить: «Может ли кто-нибудь здесь хоть на это ответить?» затем мы быстро приближаемся к этой липкой тревоге, когда на что-либо трудное невозможно ответить. Если мы на самом деле не откроем вопрос для ответов , мы, откровенно говоря, не имеем конкретного представления о том, кто может на него ответить. В этом и весь смысл спрашивать.
Тим Пост
49
@bmargulies Какой вред приносит этот вопрос, просто существуя? Это по теме, это интересно, и кто-то наверняка мог бы на это ответить. Черт возьми, кто-то из MS может увидеть это и ответить на него, и тогда это отличное дополнение к сайту. Пожалуйста, прекратите искать что-либо потенциально отрицательное в вопросе, прежде чем пытаться увидеть что-то положительное.
Тим Пост

Ответы:

22

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

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

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

Вспышка
источник
8

Я не уверен, что такое «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 ++ не является открытым или бесплатным; можно получить лицензии на исследования.
Ира Бакстер
источник
2
«DOM» - это, по сути, HTML-язык для AST. Однако он предполагает, что существует канонический синтаксис, тогда как компиляторы C ++ обычно используют немного другой синтаксис. (Например, для создания более точных сообщений об ошибках.).
MSalters
3
DOM в C # означает «AST с плохим разрешением», используемый для генерации кода. Невозможно реалистично анализировать программы C ++ с тем разрешением, которое предлагает C # dom.
Ира Бакстер
См inevitablesoftware.com/Products.aspx за то , что хороший C # CodeDOM предложения
TheFlash
@Geotarget: а какое отношение имеет C # Dom к этому вопросу?
Ира Бакстер
@IraBaxter - то, что я ищу, когда говорю «Code DOM» - многие люди отмечали, что не понимают, что такое Code DOM, и / или путают его с JS HTML DOM. Конечно, я не эксперт по C ++ (как я уже говорил ранее), поэтому я не знаю, что может понадобиться в DOM кода C ++, хотя я понимаю, что Inevitablesoftware предоставляет очень простой и легкий в использовании код DOM, и я Я ищу DOM кода C ++ с похожим API.
TheFlash