Чи доступний код DC VC ++ з VS-аддонів?


100

Visual Studio IntelliSense для VC ++ включає "повний" аналізатор EDG C ++ (також використовується Intel та іншими). Оскільки DOM з кодом C # доступний для аддонів (виправте мене, якщо я помиляюся), чи є код C ++ DOM також доступним? Чи можна це використовувати для аналізу відкритого проекту VC ++ у середовищі VS?


25
Щойно прийшов з іншої вашої теми ; це гарне питання.
Qix - МОНІКА ПОМИЛИЛА

81
Знову ж таки, "незрозуміло, про що ви питаєте?" - справді люди? "Я нічого не знаю про передумови цього питання" не означає "Незрозуміло, що ви запитуєте".
Tim Post

9
@Dave - я додав відповідь, щоб довести, що і співробітники, які не працюють з MS, можуть вирішити цю проблему. Є люди, які робили речі, близькі до того, що я хочу.
TheFlash

55
@DaveHillier Якщо це на тему, це тут дуже вітається. Поза цим немає жодної дискусії. Якщо ми почнемо вступати в "Чи може хтось тут навіть відповісти на це?" то ми швидко наближаємось до такого клейкого гніту, де що- небудь важке є потенційно невідчутним. Якщо ми насправді не відкриємо питання для відповідей , ми відверто не маємо конкретної ідеї щодо того, хто міг би відповісти на нього. В цьому і полягає вся суть запитань.
Тім Пост

49
@bmargulies Яку шкоду приносить це питання просто існуючим? Це на тему, це цікаво, і хтось міг би на це відповісти. Чорт, хтось із MS може побачити це і відповісти на нього, і тоді це чудове доповнення до сайту. Будь ласка, перестаньте шукати будь-яке потенційно негативне питання, перш ніж намагатися побачити щось позитивне.
Тім Пост

Відповіді:


22

Візуальна ++ рефакторінга C здатне перейменовувати проект для учасників. Його створили MS, але, очевидно, вони використовували внутрішній код DOM для досягнення цього. Так це можливо, я просто ще не знаю як.

Розширення CppLister здатне читати бази даних інтелісценції, створені VS, щоб перелічити різних членів у класі.

Ви завжди можете використовувати відкритий джерело аналізатора Clang C ++ (власне компілятор) і читати AST в C # Object Model. Див. CppSharp та ClangSharp для прив'язки C # до Clang.


8

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

Ваша реальна заявлена ​​проблема - ви хочете проаналізувати вихідний код C ++. Я погоджуюсь, що наявність інформації про EDG на передній частині була б вагомою підмогою для цього; ти дуже насправді не хочете , щоб спробувати написати свій власний C ++ аналізатора (і вам потрібно багато речей в минулому, розбір Google мого есе про «життя після розбору»).

Тож у вас є такі варіанти:

  • Знайдіть двері в техніку EDG в MSVS. Оскільки у вас не було великої кількості удачі і, мабуть, нічого не було зафіксовано в MS, що говорить, що це доступно, ви, мабуть, не матимете великої кількості удачі таким чином. Якби я був у взутті 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). Ні Кланг, ні 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 - Що я шукаю, коли кажу "DOM Code" - багато людей коментують, що вони не розуміють, що таке DOM коду, і / або плутають його з JS HTML DOM. Звичайно, я не є експертом C ++ (як я вже говорив раніше), тому не знаю, що може знадобитися в коді C ++ DOM, хоча я розумію, що Inevitablesoftware забезпечує дуже простий і простий у використанні код DOM, і я я шукаю код C ++ DOM зі схожим API.
TheFlash
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.