Nie jestem pewien, co to jest „C ++ Code DOM”, jeśli w ogóle istnieje. Liczy się to, że MSVS używa interfejsu EDG do analizowania i określania znaczenia symboli, aby wspierać działania MSVS IDE. EDG IIRC buduje własne wewnętrzne struktury danych reprezentujące program; Nie mam powodu, by sądzić, że te struktury danych to „C ++ Code DOM” lub że są one dla Ciebie widoczne lub możesz się o nich dowiedzieć w MSDN.
Twoim prawdziwym problemem jest to, że chcesz przeanalizować kod źródłowy C ++. Zgadzam się, posiadanie informacji wyjściowych EDG byłoby w tym znaczącą pomocą; ty naprawdę naprawdę nie chce próbować napisać własny parser C ++ (i trzeba wiele rzeczy przeszłe parsowania, google mój esej o „życiu po parsowania”).
Masz więc do wyboru następujące możliwości:
- Znajdź drzwi do maszyn EDG w MSVS. Ponieważ nie miałeś dużo szczęścia i wydaje się, że stwardnienie rozsiane nic nie udokumentowało, że to jest dostępne, prawdopodobnie nie będziesz miał dużo szczęścia w ten sposób. Gdybym był na miejscu stwardnienia rozsianego, nie upubliczniłbym tego; byłby to po prostu kolejny ból głowy związany z obsługą, i to w przypadku oprogramowania, które nawet nie jest ich.
- Użyj komercyjnego interfejsu EDG bezpośrednio od EDG . Rozumiem, że oferują bezpłatne licencje na użytkowanie indywidualne. (Moje rozumienie może być błędne). W ten sposób pominiesz wszelkie ograniczenia, jakie MS może mieć w dostępie ... za cenę konieczności samodzielnej konfiguracji interfejsu EDG. Wada: EDG chce być front-endem kompilatora, a nie front-endem analizatora. To rozróżnienie może wydawać się subtelne, ale prawdopodobnie cię ugryzie. Na przykład podejrzewam, że EDG odrzuca komentarze; interfejsy kompilatora nie potrzebują ich. Jeśli chcesz sprawdzić komentarze w swoim analizatorze, może to być prawdziwy problem.
- Użyj Clang . Jest to parser języka C ++ o otwartym kodzie źródłowym, zaprojektowany do użytku w wielu różnych celach analizy programów, a także jako front-end kompilator C ++. Nie mam z tym doświadczenia, ale wydaje się całkiem dobrze przemyślane i wydaje się oferować wiele udogodnień. Nie wiem, czy ma specyficzne wsparcie dla dialektu MS C ++.
- Użyj innego komercyjnego interfejsu użytkownika, naszego (DMS) interfejsu C ++. Będąc architektem tego, jestem prawie pewien, że jest dobrze przemyślane (łącznie z obsługą MS Visual C ++); ma szczególne doświadczenie w używaniu tego do przeprowadzania złożonych analiz C ++ i zadań transformacji. W przeciwieństwie do EDG jest przeznaczony do obsługi analizy, transformacji i generowania (np. Przechwytuje komentarze, a nawet podstawę literałów, aby można je było poprawnie odtworzyć). Fundacja, DMS, ma wiele wbudowanych maszyn do obsługi niestandardowych analiz: tworzenie tabel AST i symboli, gramatyki atrybutów, ramy przepływu danych, kontrola śródproceduralna i analiza przepływu danych na poziomie AST, zarządzanie BDD, dopasowywanie wzorców źródłowych, - transformacje źródeł. Clang i EDG oferują konstrukcje AST i tablice symboli; Clang (ale nie sądzę, że EDG) ma analizę przepływu (na poziomie LLVM), ale nie analiza przepływu na poziomie AST (AFAIK). Ani Clang, ani EDG nie oferują możliwości wzorca / transformacji źródła, więc to, co jest lepsze, zależy od twoich długoterminowych zadań. W porównaniu z innymi opcjami, nasz interfejs C ++ nie jest open source ani darmowy; można uzyskać licencje na badania.