Два мощных способа открыть ящик Clang. Что следует учитывать при принятии решения об использовании одного над другим?
На веб-сайте Clang есть несколько старых обучающих программ , посвященных использованию RecursiveASTVisitor
для поиска Decl
узла AST, а такженовый учебник о том, как использовать ASTMatcher
, чтобы найти for
stmt. В этом контексте многое совпадает с тем, чего они могут достичь.
Для простых задач, как упомянуто выше, я считаю ASTMatcher
более удобным, поскольку используемый предикат является коротким и легко читаемым. Однако для более сложных задач, таких как преобразования источника в источник, где требуется анализ для всей единицы перевода. Реализация функций посетителя кажется лучшим подходом. Потому что предикаты в моем ASTMatcher
имеют тенденцию становиться длинными и трудными для понимания. Может быть, есть эффективный способ использования ASTMatcher
с lang и сложными предикатами. Я ценю любые советы по этому вопросу. Поскольку ASTMatcher
был представлен позже, намеревается ли он заменить старый метод AST Visitor
?