2011-08-17 12 views
3

ParseKitが見つかりましたが、単純な例では機能しないようです。単純な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'; 

しかし、方法は発生しません。

+0

NSString * grammar = @ "@ start = foo; foo = 'FOO:' bar; bar = 'BAR';";いずれも動作しませんでした – JPC

答えて

2

ParseKitの開発者はこちらです。上記の例はうまくいきません。 「FOO:」問題はあなたの文法のような言葉を期待している

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

​​

3などのトークン:デフォルトでは、トークナイザはこれをトークン化しますが、コロンはデフォルトではシンボルの文字、ではありませんWordの文字。コロン(:)が有効な内部 "Word"文字として受け入れられるようにしたい場合は、それを受け入れるようにトークンをカスタマイズする必要があります。私はちょっとあなたが本当にそれが欲しいのか疑問に思う。

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

あなたは多くの柔軟性を持っている:

http://parsekit.com/tokenization.html私はより良い「おもちゃ」文法が何かのようにされるかもしれないと起動すると思う:あなたが行う場合は、トークナイザカスタマイズする方法を学ぶためにここにドキュメントを読んで文法の中であなたの宣言をどうやって行うのか。同等の文法は次のようになります。

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

それをしました。ありがとう! – JPC

関連する問題