1

HTMLマークアップの非常に小さなサブセットを解析しようとしています。

PKSequence *parrser = [PKSequence sequence];
[parrser add:[PKSymbol symbolWithString:@"<title>"]];   
PKWord *word = [PKWord word];
[word setAssembler:self selector:@selector(workOnWordAssembly:)];
[parrser add:word];
[parrser add:[PKSymbol symbolWithString:@"</title>"]];

PKAssembly *result = [parrser bestMatchFor:[PKTokenAssembly assemblyWithString:@"<title>teeest</title>"]];


-(void)workOnWordAssembly:(PKAssembly *)a {
        NSLog(@"We entered this");
}

しかし、workOnWordAssembly呼び出されていません。

4

1 に答える 1

2

ParseKitの開発者はこちら。google code で head of trunkを使用していることを確認してください。

  1. アセンブラ コールバックには 2 つの引数が追加されました。
  2. デフォルトでは、文字列<title>は単一の Symbol トークンとしてトークン化されません。それは、1 つの<シンボル トークン、1 つのtitleワード トークン、および 1 つの>シンボル トークンになります。ただし、その動作を構成することはできます。

ParseKitのドキュメント、特にトークン化のドキュメントを読んで、 ParseKit でのトークン化がどのように機能するかを理解してください。


上記の基本的なタスクを達成するために欠けているものは次のとおりです。ただし、これが実際のタスクに最適なアプローチであるかどうかはわかりません。上記のドキュメントを読むと、それを説明するのに役立つと思います。

PKTokenizer *t = [PKTokenizer tokenizerWithString:@"<title>foobar</title>"];
[t.symbolState add:@"<title>"];
[t.symbolState add:@"</title>"];

PKAssembly *a = [PKTokenAssembly assemblyWithTokenizer:t];

PKSequence *p = [PKSequence sequence];

[p add:[PKSymbol symbolWithString:@"<title>"]]; 

PKWord *word = [PKWord word];
[word setAssembler:self selector:@selector(parser:didMatchWord:)];
[p add:word];

[p add:[PKSymbol symbolWithString:@"</title>"]];

PKAssembly *result = [p bestMatchFor:a];

-(void)parser:(PKParser *)p didMatchWord:(PKAssembly *)a {
        NSLog(@"%s %@", __PRETTY_FUNCTION__, a);
}
于 2012-12-05T07:09:20.453 に答える