Objective-C - 生成源代码报告

时间:2012-05-22 13:21:58

标签: objective-c ios parsing

我面临以下问题:我需要生成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文档中列出的所有方法(即使它们在文件中)。我必须调查为什么这些方法没有出现。

提前感谢所有答案/提示/评论......

2 个答案:

答案 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中轻松提取此信息。