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

Bil*_*ill 19 parsing antlr static-analysis objective-c javacc

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

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

我确实在ANTLR网站上找到了一个语法,但是当我把它解雇时,我根本无法解析它.例如,它回应了该行:

void x();
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

但是我需要能够解析接口和实现的东西.

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

yan*_*yan 17

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

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

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


Mat*_*ier 6

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

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

  • @Bill:这是否具有讽刺意味?clang的一个主要卖点(http://clang.llvm.org/features.html#libraryarch)是基于库的架构,易于扩展. (2认同)