Я не впевнений, що таке "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 ++ передній кінець не є відкритим або безплатним; можна отримати ліцензії на дослідження.