Nie sądzę, dzyń może stopniowo analizować plików C++, ale jest to jeden z tych celów projektu: http://clang.llvm.org/features.html
pisałem coś podobnego do mojego projektu końcowego roku. Nie był to edytor C++, ale wtyczka Visual Studio, której głównym zadaniem była poprawa intellisense C++ (jak Visual Assist X).
Kiedy pisałem ten projekt, myślałem również o inkrementującym parserze C++, ale nie znalazłem żadnego odpowiedniego rozwiązania. Aby rozwiązać problem intellisense C++ użyłem normalnego parsera C++ z GCC. Jednak było wolno, aby parsować plik po każdym żądaniu zakończenia kodu (ctrl + spacja), po prostu spróbuj dodać boost :: spirit. Aby ten projekt działał poprawnie, analizowałem pliki w tle i po każdej prośbie o uzupełnienie kodu porównałem bieżący plik z jego poprzednią wersją (poprzez diff), aby wykryć zmiany dokonane podczas ostatniego parsowania. Po tych zmianach zaktualizowałem drzewo składniowe, głównie dodając lub usuwając zmienne.
Poza inkrementalnym analizowaniem, istnieje również inny problem z projektami takimi jak ta. Przeważnie będziesz analizować kod C++, który jest edytowany, więc jest to nieprawidłowy kod. Biorąc pod uwagę złożoną gramatykę C++, czasami parser nie będzie w stanie odzyskać danych po błędach składniowych, więc nie będzie poprawnie wykrywał niektórych symboli w kodzie.
Inną kwestią są różnice między parserami/kompilatorami w C++. Powiedzmy, że używam pracy w Visual Studio i użyłem pewnej kompilacji kompilatora VC++ w moim kodzie. Analizator składniowy nie będzie w stanie poprawnie go przeanalizować.
Ktoś chce zrobić klon Visual Studio [do wykrywania błędów przed kompilacją] :) – Earlz
Interesujący projekt. Od jakiegoś czasu czekałem na kogoś, kto napisze IDE oparte na Clang. Jeśli skończysz budować pełne IDE, rozważ użycie CMake jako jego plików systemowych/projektowych. – Tronic
Być może libclang ['clang_reparseTranslationUnit()'] (http://clang.llvm.org/doxygen/group__CINDEX__TRANSLATION__UNIT.html#ga524e76bf2a809d037934d4be51ea448a) może zaspokoić twoje potrzeby? – bames53