Ric*_*ich 3 macos parsing objective-c parsekit
我必须掌握ParseKit语法语法(在演示应用程序中玩)我现在正试图让我自己的迷你演示工作,但到目前为止没有太大的成功.汇编程序回调没有被调用.
以下是相关代码的精简版.当testParse运行解析器似乎做的事情确定,正确地匹配我的字符串到我的anything生产(这也适用于演示),但didMatchAnything:只是没有得到调用.
#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
Run Code Online (Sandbox Code Playgroud)
在ParseKit代码中挖掘我可以看到PKParser的第129行
[assembler performSelector:assemblerSelector withObject:self withObject:a];
Run Code Online (Sandbox Code Playgroud)
没有被执行,因为assembler是零.反过来,这导致我进入解析器工厂; 我对正在发生的事情的理解开始失败.
免责声明; 我知道,我可能需要阅读The Book,但一次只能做一件事.我希望得到一个小概念证明工作,然后分配30本老鼠买一本书,如果我的项目是非首发,我可能永远不会再读了:)
这里是ParseKit的开发者.
前段时间我更改了Assembler回调的签名以接受两个参数:
以前,只有一个论点:大会.
我不确定文档是否已完全更新以反映这一点.
所以我怀疑如果你只是将Assembler回调方法更改为此方法,它将起作用:
- (void)parser:(PKParser *)p didMatchAnything:(PKAssembly *)a {
NSLog(@"%s %@", __PRETTY_FUNCTION__, a);
}
Run Code Online (Sandbox Code Playgroud)
如果没有,请告诉我,我将帮助进一步调试.
对于背景:我做了这个改变,因为我遇到了一个情况,我的Assembler回调真的需要检查刚刚进行当前匹配的Parser.
它还更紧密地对齐了委托回调的强大Cocoa约定,它总是将委托者对象作为它们的第一个参数.事后来说,我有点希望我已经将ParseKit 中汇编程序的整个概念重命名为代表.因为在Cocoa的说法中,这基本上就像汇编者一样.
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |