Подтвердить что ты не робот

Parsing Objective-C код для статического анализа

Мне нравится статический анализ и проверка времени компиляции, почти по ошибке, но большая часть моей дневной работы находится в Objective-C. Чтобы разрешить это напряжение, я хотел бы написать собственные инструменты анализа, которые можно запустить в моих проектах Objective-C.

Но поиск в Интернете по интернету говорит о том, что людям сложнее собрать полную грамматику Objective-C. Один сайт в принципе рекомендует отказаться.

Я нашел грамматику

4b9b3361

Ответ 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 и обеспечивает очень гибкий кодовый запрос рамки.