19

我喜欢静态分析和编译时检查,几乎是个错误,但我日常工作的大部分时间都在 Objective-C 中。为了解决这种紧张关系,我希望能够编写自己的分析工具,可以在我的 Objective-C 项目中运行。

但是在互联网上搜索表明人们很难整理出完整的 Objective-C 语法。一个网站 基本上建议放弃。

我确实在 ANTLR 网站上找到了一个语法,但是当我启动它时,我根本无法让它解析任何东西。例如,它响应了以下行:

void x();

src/main/resources/somecode.m line 1:0 no viable alternative at input 'void'

:(

我仔细查看了语法,发现以下令人沮丧的免责声明:

it's a work in progress, most of the .h file can be parsed

但我需要一些可以解析接口和实现的东西。

那里有完整的 Objective-C 2.0 语法吗?我更喜欢可以与 Scala 一起使用的东西(因此任何与 Java 兼容的东西,比如 ANTLR,都是完美的),但在这一点上,我愿意调整为另一个解析器工具包设计的东西。

4

4 回答 4

17

正如其他人所提到的,Clang 将是正确的解决方案。您可以提供自己的 AST 使用者,即在遍历 AST 时将调用的类,让您不必担心解析或弄乱语法。

Clang 完全支持 Objective-C,并且静态分析器中已经有很多类,您可以在之后对自己的检查进行建模。(在clang/lib/StaticAnalyzer/Checkers)。

该目录包含许多静态分析器检查器,但您也可以只创建一个普通的 AST 消费者。有关详细信息,请参阅http://code.google.com/p/chromium/wiki/WritingClangPlugins

于 2011-07-25T00:21:34.520 回答
6

Clang 是一个支持 Objective-C 的静态分析工具。过去我发现它非常有用。

http://clang-analyzer.llvm.org/

于 2011-07-22T15:08:32.607 回答
4

clang 是可扩展的;您可以扩展他们现有的静态分析或创建自己的。llvm / clang 被构建为一系列可以链接(动态或静态)的库。一个很好的起点是 ARC(自动引用计数)迁移器,它负责静态分析和重写Objective-C 代码。

arcmt-test是一个使用 ARC 迁移器库的小示例程序。

于 2011-07-22T21:16:07.457 回答
1

你可以使用OCDepend,它是一个基于 Clang 的静态分析工具,简化了 Objective-C 代码质量的管理,并提供了一个高度灵活的代码查询框架。

于 2013-03-15T15:54:23.350 回答