3

ParseKit を発見したばかりですが、簡単な例では動作しないようです。

NSString *test = @"FOO:BAR";

    NSString *grammar = ...//get grammar txt file and read it into a string

    PKParser *parser = nil;
    parser = [[PKParserFactory factory] parserFromGrammar:grammar assembler:self];

    [parser parse:test];
}

- (void)didMatchFoo:(PKAssembly *)a
{
    NSLog(@"FOO");
}

- (void)didMatchBar:(PKAssembly *)a
{
    NSLog(@"BAR");
}

私の文法ファイルは次のようになります。

@start = foo;
foo = 'FOO:' bar;
bar = 'BAR';

しかし、メソッドは起動しません。

4

1 に答える 1

2

ParseKit の開発者はこちら。上記の例は機能しません。デフォルトでは、Tokenizer はこれをトークン化します。

FOO:BAR

3 つのトークンとして:

Word (FOO)
Symbol (:)
Word (BAR)

問題は、あなたの文法が「FOO:」のような単語を期待していることですが、コロンはデフォルトで Word 文字ではなく Symbol 文字です。コロン (:) を有効な内部「Word」文字として受け入れたい場合は、それを受け入れるようにトークナイザーをカスタマイズする必要があります。あなたが本当にそれを望んでいるのか、ちょっと疑わしいです。その場合は、こちらのドキュメントを読んで、Tokenizer をカスタマイズする方法を学んでください: http://parsekit.com/tokenization.html

始めるのに適した「おもちゃ」の文法は、次のようなものになると思います。

@start = pair;
pair = foo colon bar;
foo = 'FOO';
colon = ':';
bar = 'BAR';

文法で宣言を行う方法には多くの柔軟性があります。同等の文法は次のようになります。

@start = foo ':' bar;
foo = 'FOO';
bar = 'BAR';
于 2011-08-17T00:41:58.897 に答える