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の型宣言ではなく、他のバランスのとれた括弧を含む可能性のある括弧で囲まれた文字列であり、括弧を数えることでそれをlexできます。

楽しむ!

于 2013-07-07T21:48:27.243 に答える