解析Objective-C代码进行静态分析

时间:2011-07-22 12:58:01

标签: objective-c parsing antlr static-analysis javacc

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

但是,在互联网上搜索网络表明,人们很难将完整的Objective-C语法整合在一起。 One site基本上建议放弃。

我确实找到了一个语法on the ANTLR website,但是当我把它解雇时,我根本无法解析它。例如,它回应了这一行:

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 个答案:

答案 0 :(得分:16)

正如其他人所说,Clang将是正确的解决方案。您可以提供自己的AST使用者,即在浏览AST时将调用的类,这样您就不必担心解析或弄乱语法了。

Clang完全支持Objective-C,静态分析器中已经有很多类可以为你自己的检查建模。 (在clang/lib/StaticAnalyzer/Checkers)。

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:1)

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