llvm-лязг: возрастающий или синтаксический анализатор онлайн?

Там должен так или иначе использовать синтаксический анализатор llvm-лязга возрастающим/онлайн способом?

Скажите, что я пишу, что редактор и я хотим смочь проанализировать код C++, который я имею передо мной.

Я не хочу писать свой собственный изрубленный синтаксический анализатор.

Я хотел бы использовать что-то полнофункциональное, как llvm-лязг.

Существует ли простой способ угнать синтаксический анализатор llvm-лязга? (И это достаточно быстро для выполнения его непрерывно в фоновом режиме)?

Спасибо!

11
задан Dan D. 17 February 2012 в 21:45
поделиться

1 ответ

Я не думаю, что clang может постепенно анализировать файлы C ++, но это одна из целей этого проекта: http://clang.llvm.org/features.html

Я написал нечто подобное для своего финала Это был не редактор C ++, а плагин Visual Studio, основной задачей которого было улучшение C ++ intellisense (например, Visual Assist X).

Когда я писал этот проект, я тоже думал насчет инкрементного синтаксического анализатора C ++, но я не нашел подходящего решения. Для решения проблемы intellisense C ++ я использовал обычный синтаксический анализатор C ++ от GCC. Однако это было слишком медленно, чтобы анализировать файл после каждого запроса на завершение кода (ctrl + пробел), просто попробуйте включить boost :: spirit. Чтобы этот проект работал правильно, я анализировал файлы в фоновом режиме и после каждого запроса на завершение кода сравнивал текущий файл с его предыдущей версией (через diff), чтобы обнаружить изменения, сделанные в результате последнего анализа. После этих изменений я обновил синтаксическое дерево, в основном путем добавления или удаления переменных.

Кроме инкрементного синтаксического анализа, у подобных проектов есть еще одна проблема. В основном вы будете разбирать код C ++, который редактируется, чтобы он был недействительным. Учитывая сложную грамматику C ++, иногда синтаксический анализатор не может восстановить синтаксические ошибки, поэтому он некорректно обнаруживает некоторые символы в коде.

Еще одна проблема - различия парсеров / компиляторов C ++. Скажем, я работаю в Visual Studio, и я использовал в своем коде некоторую конструкцию, специфичную для компилятора VC ++. Парсер Clang не сможет правильно его разобрать.

3
ответ дан 3 December 2019 в 12:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: