我面临以下问题:我需要生成Objective-C源代码的详细报告(为iOS编写)。我需要能够显示以下内容:
课程报告:
班级名称|文件位置|方法数量
ClassA | /my/path/ClassA.m | 7
ClassB | /my/path/ClassB.m | 12个
....
方法报告:
方法名称|班级名称|档案位置
method1 | ClassA | /my/path/ClassA.m
method2 | ClassA | /my/path/ClassA.m
....
我还需要能够显示其他一些报告,但此时我感兴趣的是从某个地方开始。
请注意:
- 目前我没有要求显示行数/复杂度等。
- 类似于上面的报告就足够了(只要它包含上面的信息我就会非常高兴;我可以解析信息并创建所需的报告)
- 我已经看过Doxygen及其xml输出,但是对于我运行的几个示例项目,我没有得到xml文档中列出的所有方法(即使它们在文件中)。我必须调查为什么这些方法没有出现。
提前感谢所有答案/提示/评论......
答案 0 :(得分:1)
根据您对Java的熟练程度,您可能需要查看JavaCC。它还具有解析Objective-C 2.0的语法。
http://lists.apple.com/archives/java-dev/2010/Sep/msg00097.html
我承认我几乎没有打开语法来看它是多么复杂/简单。它看起来很有条理,但我自己没有尝试过。一般来说,JavaCC乍一看看起来有点陡峭但是经过几个小时的玩弄,你应该很快找到你的标记。一旦你得到它,解析任何语言变得非常容易。
答案 1 :(得分:1)
我们的Source Code Search Engine可能会帮助您做得很好。
SCSE通常以交互方式用于搜索大型源代码并检查代码。它理解它正在搜索的语言的元素,并且它有一个Objective C的选项。因为它理解语言语法,所以它不会被空白或评论或带有趣内容的字符串混淆。它还可以将搜索结果记录为文本日志和/或命中和位置的XML文件(文件,行)。
可以在批处理脚本中使用它来进行搜索和捕获结果。
为了做你想做的事,你要给SCSE提供以下查询并将结果记录到XML中(原谅我的ObjectiveC语法,我不是这样的程序员):
'@implementation' I -- this would find class declarations, bind I and capture line #
'@interface' I -- if you wanted these, too
'@end' -- would find end-of-class declarations
'+' '(' I ')' '{' -- find method declations and bind name
'-' '(' I ')' '{' -- find static method declarations
现在您有一组XML文件来描述这些元素的位置。集成命中为您提供了类和内容的大纲模型,从这些信息中计算您的值应该非常简单。
如果您想要更精确的答案,我们的DMS Software Reengineering Toolkit会有full Objective C parser。可以从解析器生成的AST中轻松提取此信息。