0

我正在尝试编写一个简单的方法声明格式化程序,我需要验证该字符串是否实际上是一个客观的 c 方法声明。

是否有某种内置功能可以做到这一点,或者可能是一个正则表达式命令来验证这些事情,或者我是否需要为这种情况实现自己的解析器?

现在我已经为空格修剪了字符串并将其转换为小写,因此使用 for 循环更容易验证。例如,在下面的代码中,我可以检查是否出现了子字符串“(void)”,以确定它是一个 void 函数,但这不起作用。一定会有更好的办法。

-(BOOL)isVoidMethod:(NSString*)method
{
    /* Remove white spaces and lower case the method */
    [self convertToParseMethod:method];

    BOOL isVoid = NO;

    if ([method rangeOfString:@"(void)"].location != NSNotFound) {
        isVoid = YES;
    } else if ( [method rangeOfString:@"(ibaction)"].location != NSNotFound ) {
        isVoid = YES;
    }

    return isVoid;
}

提前致谢 :)

4

1 回答 1

0

正确/准确地做到这一点很难。虽然方法声明看起来不太复杂,因为它可能包含 C 中可能的任何类型声明 - 一个常见的测验问题是“这个 C 声明是什么意思?” - 语法实际上相当复杂。再加上据我所知,没有针对 Objective-C 的已发布 BNF(尽管您可能会在 Clang 源代码中找到一个),而且您面临着挑战。

因此,您确实需要编写自己的解析器,但您可能会以模糊/不精确的方式处理它 - 假设输入是有效的,并模糊地“标记”它,例如,不是基于您的期望,而是基于您不期望的期望 - 因此参数类型不是 C 类型声明,而只是可能包含其他平衡括号的带括号的字符串,您可以通过计算括号来对其进行分类。

玩得开心!

于 2013-07-07T21:48:27.243 回答