我喜欢静态分析和编译时检查,但我的大部分日常工作都是在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-C2.0语法?我更喜欢能够与Scala一起工作的工具(所以任何与Java兼容的工具都是完美的,比如ANTLR ),但是在这一点上,我愿意采用为另一个解析器工具包设计的工具。
发布于 2011-07-25 08:21:35
正如其他人提到的,Clang将是正确的解决方案。您可以提供您自己的AST使用者,即在遍历AST时将调用的类,使您不必担心解析或语法混乱。
Clang完全支持Objective-C,而且静态分析器中已经有很多类,您可以仿照这些类对自己的检查进行建模。(在clang/lib/StaticAnalyzer/Checkers中)。
该目录包含许多静态分析器检查器,但您也可以只创建一个普通的AST使用者。有关更多信息,请参阅http://code.google.com/p/chromium/wiki/WritingClangPlugins。
发布于 2011-07-22 23:08:33
Clang是一个支持Objective-C的静态分析工具。我发现它在过去非常有用。
http://clang-analyzer.llvm.org/
发布于 2011-07-23 05:16:07
clang是可扩展的;您可以扩展其现有的静态分析,也可以创建自己的静态分析。llvm / clang的架构是一系列你可以(动态或静态)链接到的库。一个很好的起点是ARC (自动引用计数) migrator library,它负责静态分析和重写objective-c代码。
arcmt-test是一个使用ARC migrator库的小示例程序。
https://stackoverflow.com/questions/6790350
复制相似问题