No creo sonido metálico puede analizar de forma incremental archivos de C++, pero es una de sus metas del proyecto: http://clang.llvm.org/features.html
que he escrito algo similar para mi proyecto final. No era un editor de C++, sino un plugin de Visual Studio, cuya tarea principal era mejorar la inteligencia en C++ (como Visual Assist X).
Cuando estaba escribiendo este proyecto, también he estado pensando en el analizador sintáctico C++, pero no he encontrado ninguna solución adecuada. Para resolver el problema intellisense de C++ utilicé el analizador C++ normal de GCC. Sin embargo, fue lento, para analizar el archivo después de cada solicitud de finalización de código (ctrl + espacio), simplemente intente incluir boost :: spirit. Para que este proyecto funcione correctamente, analicé los archivos en segundo plano y, después de cada solicitud de finalización de código, comparé el archivo actual con su versión anterior (a través de diff) para detectar los cambios realizados desde el último análisis. Al tener esos cambios, actualicé el árbol de sintaxis, principalmente agregando o eliminando variables.
Excepto el análisis incremental, también hay otro problema con proyectos como este. En su mayoría estarás analizando el código de C++ que se está editando, por lo que es un código no válido. Dada la gramática compleja de C++, a veces el analizador no podrá recuperarse de los errores de sintaxis, por lo que no detectará correctamente algunos símbolos en el código.
Otro problema es C++ parsers/compilers differences. Digamos que estoy usando el trabajo en Visual Studio y he usado alguna construcción específica del compilador de VC++ en mi código. El analizador de Clang no podrá analizarlo correctamente.
Alguien quiere hacer un clon de Visual Studio [para detectar errores antes de compilar] :) – Earlz
Interesante proyecto. He estado esperando durante un tiempo a que alguien escriba un IDE basado en Clang. Si termina construyendo un IDE completo, considere usar CMake como su sistema de compilación/archivos de proyecto. – Tronic
Quizás libclang ['clang_reparseTranslationUnit()'] (http://clang.llvm.org/doxygen/group__CINDEX__TRANSLATION__UNIT.html#ga524e76bf2a809d037934d4be51ea448a) pueda satisfacer su necesidad? – bames53