gpt4 book ai didi

objective-c - 如何使用 ParseKit 过滤掉不需要的标记?

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

我正在使用 PK 尝试标记化 .gift 文件格式。我正在尝试执行以下操作:

给定一个类似这样的字符串:@"= 2 + 2"

我试图返回“2 + 2”,而无需确定经过该字符串的标记是否等于一个符号,然后再定义输出字符串的形式。我想做的是说如果 [PKToken.stringValue isEqualToString: @"="] 从 PKTokenizer 中弹出该值,然后返回字符串的其余部分,格式仍然完好无损。

让我知道这是否足够清楚...

--斯凯拉。

最佳答案

ParseKit 的开发者|这里。这是我的 ParseKit 语法答案

同样,我必须说,与 ParseKit 相比,使用正则表达式可能更好地完成对单个字符的简单过滤。

就是说,如果你想用 ParseKit 语法做这种事情,这里有一种方法:

我的语法:

@reportsWhitespaceTokens = YES;

@start = (reject! | passThru)+;
reject = '=';
passThru = ~reject;

! 表示丢弃此 token ~逻辑非

定义这个汇编器回调:

- (void)parser:(PKParser *)p didMatchPassThru:(PKAssembly *)a {
NSLog(@"%s %@", __PRETTY_FUNCTION__, a);
PKToken *tok = [a pop];
if (!a.target) {
a.target = [NSMutableArray array];
}
[a.target addObject:tok];
}

您可以看到,我们只是将 passThru 标记累积在一个存储为程序集目标的数组中。

我的司机代码:

NSString *g = // fetch grammar above
PKParser *p = [[PKParserFactory factory] parserFromGrammar:g assembler:self];
NSString *s = @"= 2 + 2";

NSArray *toks = [p parse:s];
NSString *result = [toks componentsJoinedByString:@""];
NSLog(@"res '%@'", result);
NSAssert([result isEqualToString:@"2 + 2"], @"");

最后,我们只获取累积的标记(程序集的目标)并将它们组合成一个字符串。

关于objective-c - 如何使用 ParseKit 过滤掉不需要的标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082156/

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