Я не думаю, что лязг может пошагово разобрать файлы C++, но это одна из этих целей проекта: http://clang.llvm.org/features.html
я написал что-то похожее на мой последний год проекта. Это был не редактор C++, а плагин Visual Studio, главной задачей которого было улучшение C++ intellisense (например, Visual Assist X).
Когда я писал этот проект, я также думал о инкрементном синтаксическом анализаторе C++, но я не нашел подходящего решения. Чтобы решить проблему C++ intellisense, я использовал обычный синтаксический анализатор C++ из GCC. Тем не менее, это было медленным, чтобы проанализировать файл после каждого запроса завершения кода (ctrl + space), просто попробуйте включить boost :: spirit. Чтобы этот проект работал правильно, я разбирал файлы в фоновом режиме, и после каждого запроса завершения кода я сравнивал текущий файл с его предыдущей версией (через diff), чтобы обнаружить изменения, сделанные из последнего разбора. Имея эти изменения, я обновляю синтаксическое дерево, в основном путем добавления или удаления переменных.
Кроме инкрементного синтаксического анализа, существует и другая проблема с такими проектами. В основном вы будете анализировать код C++, который редактируется, поэтому это неверный код. Учитывая сложную грамматику C++, иногда синтаксический анализатор не сможет восстановить синтаксические ошибки, поэтому он не будет корректно определять некоторые символы в коде.
Другая проблема - различия в синтаксических анализаторах/компиляторах C++. Предположим, что я использую работу в Visual Studio, и я использовал некоторые компиляторы VC++ в моем коде. Анализатор Clang не сможет правильно разобрать его.
Кто-то хочет сделать клон Visual Studio [для обнаружения ошибок перед компиляцией] :) – Earlz
Интересный проект. Некоторое время я ждал, чтобы кто-то написал IDE на основе Clang. Если вы создадите полноценную среду IDE, рассмотрите возможность использования CMake в качестве своей системы/файлов проекта. – Tronic
Возможно, libclang's ['clang_reparseTranslationUnit()'] (http://clang.llvm.org/doxygen/group__CINDEX__TRANSLATION__UNIT.html#ga524e76bf2a809d037934d4be51ea448a) может удовлетворить ваши потребности? – bames53