2012-05-22 88 views
0

我面临如下问题:我需要生成的Objective-C源代码(为iOS写的)的详细报告。我需要能够显示以下内容:目标C - 生成源代码报告

类报告:
类名称|文件位置|方法数
ClassA | /my/path/ClassA.m | 7
ClassB | /my/path/ClassB.m | 12种
....

方法报告:
方法名称|类名|文件位置
method1 | ClassA | /my/path/ClassA.m
method2 | ClassA | /my/path/ClassA.m
....

而且我还需要能够显示少数其他报告,但此时我只想从某处开始感兴趣。

请注意:
- 目前,我没有要求有行/复杂的/ etc显示的数字。
- 类似于上面的报告就足够了(只要它包含上面的信息,我将非常高兴;我可以解析信息并创建所需的报告)
- 我已经看过Doxygen及其xml输出但对于我运行的少数示例项目,我没有在xml文档中列出所有方法(即使它们在文件中)。我必须调查为什么这些方法没有出现。

在此先感谢所有的答案/提示/评论....

+1

是否记录了所有方法? –

+0

@Teofilo以色列Vizcaino Rodrig:由于代码使用了许多类,其中一些是第三方,大部分代码没有记录。这是我说我自动使用Doxygen中的“EXTRACT_ALL = YES”。但是你的评论让我想到了,并且检查了Doxygen中的其他设置,我注意到(EXTRACT_ALL)没有“提取所有”,所以我回到其他选项设置为YES(例如私人成员不会)。我只是运行它,输出看起来好多了。感谢您的评论... –

回答

1

根据与Java的熟练程度,你可能想看看JavaCC。它还具有解析Objective-C 2.0的语法。

http://lists.apple.com/archives/java-dev/2010/Sep/msg00097.html

我承认,我把门打开语法来看看它是多么复杂/简单。它看起来组织得很好,但我没有亲自尝试。一般来说,JavaCC第一眼看起来有点陡峭,但花了几个小时的时间,你应该很快找到你的标记。一旦你明白了,解析任何语言变得非常简单。

+0

我会检查一下,看看我能从JavaCC获得什么。 –

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 Toolkitfull Objective C parser。这个信息很容易从解析器产生的AST中提取出来。

+0

嗨艾拉,坦率地说,我根本没有想到在那个方向上(对文件进行搜索)。我一定要检查你的源代码搜索引擎,看看能否解决我的问题。非常感谢这个建议。 –