Parsing Objective-C код для статического анализа
Мне нравится статический анализ и проверка времени компиляции, почти по ошибке, но большая часть моей дневной работы находится в Objective-C. Чтобы разрешить это напряжение, я хотел бы написать собственные инструменты анализа, которые можно запустить в моих проектах Objective-C.
Но поиск в Интернете по интернету говорит о том, что людям сложнее собрать полную грамматику Objective-C. Один сайт в принципе рекомендует отказаться.
Я нашел грамматику
Ответы
Ответ 1
Как упоминалось выше, Clang будет правильным решением. Вы можете предоставить своих собственных потребителей AST, то есть классы, которые будут вызваны при переходе по AST, в результате чего вам не придется беспокоиться о разборе или испорчении грамматики.
Clang поддерживает Objective-C полностью, и в статическом анализаторе уже есть много классов, которые вы можете смоделировать своими собственными проверками. (в clang/lib/StaticAnalyzer/Checkers
).
В этом каталоге содержится много статических анализаторов, но вы также можете просто создать обычного потребителя AST. Для получения дополнительной информации см. http://code.google.com/p/chromium/wiki/WritingClangPlugins.
Ответ 2
Clang - это инструмент статического анализа, который поддерживает Objective-C. Я нашел это очень полезным в прошлом.
http://clang-analyzer.llvm.org/
Ответ 3
clang является расширяемым; вы можете расширить свой существующий статический анализ или создать свой собственный. llvm/clang архивируется как серия библиотек, на которые вы можете ссылаться (динамически или статически). Отличной отправной точкой является ARC (автоматический подсчет ссылок) migrator библиотека, которая отвечает за статический анализ и переписывание кода objective-c.
arcmt-test
- небольшая примерная программа, которая потребляет библиотеку переноса ARC.
Ответ 4
Вы можете использовать OCDepend, это инструмент статического анализа на основе Clang, который упрощает управление качеством кода Objective-C и обеспечивает очень гибкий кодовый запрос рамки.