Czy kod VC ++ DOM jest dostępny z dodatków VS?

100

Visual Studio IntelliSense dla VC ++ zawiera „kompletny” parser EDG C ++ (używany także przez firmę Intel i inne). Skoro C # Code DOM jest dostępny dla dodatków (popraw mnie, jeśli się mylę), czy C ++ Code DOM jest również dostępny? Czy można to wykorzystać do analizy otwartego projektu VC ++ w środowisku VS?

Błysk
źródło
25
Właśnie pochodzi z twojego drugiego wątku ; to jest dobre pytanie.
Qix - MONICA ZOSTAŁA POMYŚLNA
81
Ponownie, „nie wiesz, o co pytasz?” - naprawdę ludzie? „Nie wiem nic o założeniu tego pytania” nie oznacza „Nie wiadomo, o co pytasz”.
Tim Post
9
@Dave - dodałem odpowiedź, aby udowodnić, że pracownicy spoza MS również mogą rozwiązać ten problem. Są ludzie, którzy zrobili rzeczy bliskie temu, czego chcę.
TheFlash
55
@DaveHillier Jeśli jest na temat, jest tu mile widziany. Poza tym nie ma dyskusji. Jeśli zaczniemy wdawać się w „Czy ktoś tutaj może w ogóle odpowiedzieć na to pytanie?” wtedy szybko zbliżamy się do tego rodzaju lęku, w którym wszystko, co trudne, jest potencjalnie niemożliwe do rozwiązania. O ile nie otworzymy pytania na odpowiedzi , szczerze mówiąc nie mamy konkretnego pomysłu, kto mógłby na nie odpowiedzieć. O to chodzi przede wszystkim w pytaniu.
Tim Post
49
@bmargulies Jaką szkodę wyrządza to pytanie po prostu istniejąc? Jest na temat, jest interesujący i ktoś mógłby na nie odpowiedzieć. Heck, ktoś z MS może to zobaczyć i odpowiedzieć, a wtedy jest to świetny dodatek do strony. Przed podjęciem próby zobaczenia czegoś pozytywnego przestań szukać czegoś potencjalnie negatywnego w pytaniu.
Tim Post

Odpowiedzi:

22

Visual C ++ Refaktoryzacja rozszerzenie jest w stanie zmienić nazwę elementu całego projektu. Został zbudowany przez MS, ale oczywiście użyli wewnętrznego kodu DOM, aby to osiągnąć. Więc jest to możliwe, po prostu jeszcze nie wiem jak.

CppLister rozszerzenie jest w stanie odczytać baz danych utworzonych przez IntelliSense VS notować różne elementy w klasie.

Zawsze możesz użyć parsera Clang C ++ typu open source (właściwie kompilatora) i wczytać AST do modelu obiektowego C #. Zobacz CppSharp i ClangSharp dla powiązań C # z Clang.

Błysk
źródło
8

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.
Ira Baxter
źródło
2
„DOM” to w zasadzie język HTML dla AST. Zakłada się jednak, że istnieje kanoniczna składnia, podczas gdy kompilatory C ++ zwykle używają nieco innych składni. (Np. W celu tworzenia lepszych komunikatów o błędach).
MSalters
3
DOM w C # oznacza „AST o złej rozdzielczości” używany do generowania kodu. Nie można realistycznie analizować programów C ++ z rodzajem rozdzielczości, jaką oferuje C # dom.
Ira Baxter
Zobacz inevitablesoftware.com/Products.aspx, aby zobaczyć, co oferuje dobry kod C #
TheFlash
@Geotarget: a co C # Dom ma wspólnego z tym pytaniem?
Ira Baxter
@IraBaxter - Czego szukam, gdy mówię „Code DOM” - wiele osób skomentowało, że nie rozumie, czym jest Code DOM i / lub mylą go z JS HTML DOM. Oczywiście nie jestem ekspertem od C ++ (jak wspomniałem wcześniej), więc nie wiem, co może być potrzebne w DOM z kodem C ++, chociaż rozumiem, że Inevitablesoftware zapewnia bardzo prosty i łatwy w użyciu kod DOM, a ja szukam DOM z kodem C ++ z podobnym API.
TheFlash