Ответ 1
Я не думаю, что clang может инкрементно анализировать файлы С++, но это одна из целей этого проекта: http://clang.llvm.org/features.html
Я написал что-то подобное для моего проекта в прошлом году. Это был не С++-редактор, а плагин Visual Studio, главной задачей которого было улучшение С++ intellisense (например, Visual Assist X).
Когда я писал этот проект, я также думал о инкрементном парсере С++, но я не нашел подходящего решения. Чтобы решить проблему С++ intellisense, я использовал обычный синтаксический анализатор С++ из GCC. Тем не менее, это было медленным, чтобы проанализировать файл после каждого запроса завершения кода (ctrl + space), просто попробуйте включить boost:: spirit. Чтобы этот проект работал правильно, я разбирал файлы в фоновом режиме, и после каждого запроса завершения кода я сравнивал текущий файл с предыдущей версией (через diff) для обнаружения изменений, сделанных в результате последнего разбора. После этих изменений я обновил синтаксическое дерево, в основном путем добавления или удаления переменных.
Кроме инкрементного синтаксического анализа, возникает и другая проблема с такими проектами. В основном вы будете анализировать код С++, который редактируется, чтобы он недействительный код. Учитывая сложную грамматику С++, иногда синтаксический анализатор не сможет восстановить синтаксические ошибки, поэтому он не будет корректно определять некоторые символы в коде.
Другая проблема - различия в синтаксических анализаторах/компиляторах С++. Скажем, я использую работу в Visual Studio, и я использовал некоторые компиляторы VС++ в моем коде. Анализатор Clang не сможет правильно разобрать его.