我正在尝试解析一小部分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
。
答案 0 :(得分:2)
ParseKit的开发人员。确保您使用的是head of trunk on google code。
<title>
不会被标记为单个Symbol标记。这将是一个<
符号标记,一个title
字标记和一个>
符号标记。但是,您可以配置该行为。请阅读ParseKit上的文档,特别是tokenization docs,以了解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);
}