使用正则表达式解析Obj-c方法

时间:2012-07-26 17:43:32

标签: objective-c regex parsing methods

我正在尝试用正则表达式解析Obj-c源代码。我想找到声明和实现。

首先,我寻找这样的课程:

@implementation(.|\n)+@end

@interface(.|\n)+@end

然后我有这些模式在类的范围内找到 instance-methods

For interface:       -.*;
For implementation:  -.*{

但是来自:注释,字符串和数学运算也包括在内。

这些模式失败的示例:

//I'm pretending to-be an instance method;

/*
Disabled methods:
- (void)myProgrammerDidntLikeMe;
*/

if (a + b == 2) { ... }
str = @"-----";

如何让模式排除这些假装的方法,还有其他一些我没有预料到的东西吗?

更新:在尝试解析单个方法字符串时,我注意到我的模式也可用于识别它们。这就是我想出的:

(-|\+)\s\(([\w|\*|\s]*)\)(?:(?:(?:(\w*)(?:\:\([\w|\s|\*]*)\)(\w*)\s*){1,}))?(\w*)

然而,与我的第一次尝试不同,它没有返回类型。但我没关系,因为我从来没有见过一个被使用过。

- noReturnType

我对评论和ifs一无所知,但1)对于例如数学运算符而言,它更难以愚弄2)它还会解析方法本身。

现在我正在改变我的问题,但我正在尝试实现像这样的捕获组输出,我不知道如何。

1. -
2. void
FOLLOWING_CAN_REPEAT
3. setFoo:
4. Foo*
5. foo
END_REPEAT

2 个答案:

答案 0 :(得分:1)

如果您想要可靠地执行此操作,则无法使用正则表达式执行此操作。

你打算怎么做#if?宏?头文件?人们不断学习这一课:正则表达式不能用于可靠的计算机语言处理。

如果你不介意偶尔犯错,你已经有了一个有效的解决方案(有点);你可以根据自己的心灵内容进行修补,但它会有所改善,但总会有一个根本的缺陷。

答案 1 :(得分:1)

我会使用类似YaccBison的东西,使用Objective-C语言语法,创建一个可以挂钩的高效c源解析器。