Включить только синтаксический анализ в clang

Я пытаюсь реализовать инструмент clang, который выполняет синтаксический анализ с использованием ASTMatcher API. Я пытаюсь выяснить, как указать дополнительные флаги для clang, чтобы отключить семантические проверки. Я знаю, что clang создает гигантский AST, который включает системные заголовки. Есть ли способ разобрать исходный код, отключив семантические проверки, которые приводят к ошибкам неизвестного типа? Я просто хочу проанализировать синтаксическую целостность исходного кода данного файла. До сих пор я пытался обойти эту проблему, изменив DSL, чтобы проверить, соответствует ли код из основного файла:

cxxRecordDecl(isExpansionInMainFile()).bind("class");

Но это не мешает clang просматривать заголовочные файлы.


person gPats    schedule 27.01.2020    source источник


Ответы (1)


К сожалению, простой синтаксический анализ невозможен без sema. Проблема не конкретно в clang, а во всех парсерах C++. Без одновременного семантического анализа любой синтаксический анализ неоднозначен. Эта проблема должным образом освещена в этом ответе.

person Valeriy Savchenko    schedule 28.01.2020
comment
Спасибо за разъяснения! Есть ли способ сгенерировать дерево разбора --fsyntax-only в ASTMatchers? - person gPats; 28.01.2020
comment
Вы можете использовать SyntaxOnlyAction: clang.llvm.org/doxygen/ В основном это ( и --fsyntax-only) означает, что вы получаете AST (с семантическим анализом) и не идете дальше этого (генерация IR, оптимизация и т. д.). - person Valeriy Savchenko; 29.01.2020