gpt4 book ai didi

objective-c - ParseKit 汇编程序回调未调用 : What am I doing wrong?

转载 作者:搜寻专家 更新时间:2023-10-30 20:03:34 25 4
gpt4 key购买 nike

在掌握了一些 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

深入研究 ParseKit 代码,我可以看到 PKParser 的第 129 行

[assembler performSelector:assemblerSelector withObject:self withObject:a];

没有被执行,因为 assembler 是 nil。这反过来又将我带到了解析器工厂;我对正在发生的事情的理解开始失败。

免责声明;我知道,我可能需要阅读The Book,但一次读一件事。在拿出 30 只老鼠买一本书之前,我想获得一个小的概念证明,如果我的项目是一个非初学者,我可能永远不会再读了:)

最佳答案

这里是 ParseKit 的开发者。

不久前,我更改了 Assembler 回调的签名以接受两个参数:

  1. 与当前标记匹配的解析器
  2. 包含输入解析的当前状态的程序集

以前,只有一个论点:大会。

我不确定文档是否已完全更新以反射(reflect)这一点。

所以我怀疑如果您只是将您的 Assembler 回调方法更改为此,它将起作用:

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

如果没有,请告诉我,我会帮助进一步调试。


对于背景:我进行此更改是因为我遇到了这样一种情况,即我的 Assembler 回调确实需要检查刚刚进行当前匹配的解析器。

它还更紧密地符合 Delegate 回调的强 Cocoa 约定,该回调始终将 delegator 对象作为它们的第一个参数。事后看来,我有点希望我在 ParseKit 中将 Assemblers 的整个概念重命名为 Delegates。因为用 Cocoa 的说法,这基本上就是汇编程序。

关于objective-c - ParseKit 汇编程序回调未调用 : What am I doing wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9646054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com