2012-03-10 9 views
3

ParseKitの文法構文(デモアプリケーションで遊んでいます)で少し掴んでいますが、私は現在自分のミニデモを稼働させようとしていますが、これまでのところ大きな成功はありません。アセンブラのコールバックは呼び出されません。ParseKitアセンブラのコールバックが呼び出されない:何が間違っているのですか?

は以下関連コードの要約版です。 testParseを実行すると、パーサは正常に動作していると思われ、anythingのプロダクション(デモでも動作します)に正しく一致しますが、didMatchAnything:は呼び出されません。

私は assemblerがnilであるため、
[assembler performSelector:assemblerSelector withObject:self withObject:a]; 

PKParserの129は、実行されていないことのラインを見ることができますParseKitコードの周り掘り
#import <Foundation/Foundation.h> 

@class PKParser; 

@interface FileParserThing : NSObject { 
    PKParser* _parser; 
} 
- (void)testParse; 
@end 


#import <ParseKit/ParseKit.h> 
#import "FileParserThing.h" 

@interface FileParserThing() 
@property (nonatomic, retain)PKParser* parser; 
- (void)didMatchAnything:(PKAssembly *)a; 
@end 

@implementation FileParserThing 

@synthesize parser = _parser; 

-(id)init 
{ 
    if (!(self = [super init])) return nil; 

    NSString *g = @"@start = anything; anything = Any+;"; 
    self.parser = [[PKParserFactory factory] parserFromGrammar:g assembler:self]; 

    return self; 
} 

- (void)testParse 
{ 
    NSString *s = @"Foo Bar"; 
    NSLog(@"test parse with: %@", s); 
    [self.parser parse:s]; 
} 

- (void)didMatchAnything:(PKAssembly *)a 
{ 
    NSLog(@"Hooray!"); 
} 

@end 

。これは私をパーサー工場に導いてくれます。何が起こっているのかについての私の理解が失敗し始めます。

免責事項私はおそらく、を読む必要があることを知っていますが、一度に1つのことです。私は私のプロジェクトはここParseKitの非スターター:)

答えて

5

開発者であれば、私はもう読んだことがないかもしれない本のために30匹のマウスをforkする前に、コンセプトの作業の小さな証明を取得したいです。

  1. 現在のトークンにマッチパーサー

    ながらバックIは引数を受け入れるようにアセンブラコールバックのシグネチャを変更しました。

  2. 解析入力の現在の状態を含むアセンブリ

以前は、という1つの引数しかありませんでした。

私は、ドキュメントは完全にこれを反映するように更新されているかわかりません。

だから私はあなたは、単にこれにあなたのアセンブラコールバックメソッドを変更した場合、それが動作すると思われる。

- (void)parser:(PKParser *)p didMatchAnything:(PKAssembly *)a { 
    NSLog(@"%s %@", __PRETTY_FUNCTION__, a); 
} 

ない場合、私に知らせて、私はさらに、デバッグに役立ちます。背景については


:私は私のアセンブラコールバックは、実際には現在の試合をしていたパーサを検査するために必要な状況に走ったので、私はこの変更を行いました。

また、より密接に、常に彼らの最初の引数として委任者オブジェクトを持って委任コールバックの強いココア規則を整列。後知恵で私はちょっと私が代表にParseKitでアセンブラの全体のコンセプトと改名よかったです。ココアの言葉で言えば、それは基本的にアセンブラーズです。

+0

リッチでは、私の推奨する調整でここにあなたの例をセットアップしました。それはうまくいくように見えます。 –

+0

素晴らしいこと、それはそれをしました。このような迅速な対応に非常に感謝しています! – Rich

+0

エラー:paramsや新しいパーサー:paramの使用法など、最新の例をウェブサイトに反映させることができれば素晴らしいでしょう。さもなければ、ParseKitはすごく見える! – Grimless

関連する問題