我有一个从 PEGKit 创建的解析器(示例项目 here )。
我想暂停解析,而不停止主线程。由于 PEGKit 具有无限回溯,并且知道光标/头部在输入字符串中的位置,因此应该可以恢复解析。
这将非常有帮助,这样我就可以逐步创建解析器。所以解析器必须等待一个 ui Action ,比如按下 UIButton 。
如何实现或暂停然后恢复解析?
作为一个例子,我会想在到达某个符号时暂停解析。这是在 ; (分号或 EXPRESSIONPARSER_TOKEN_KIND_SEMI_COLON )之后。
所以在 token ; 之后应该保存状态,所以我可以从这个位置返回和解析。
代码:
- (void)start {
[self main_];
[self matchEOF:YES];
}
- (void)__main {
while ([self speculate:^{ [self expression_]; }]) {
[self expression_];
}
[self fireDelegateSelectorselector(parser:didMatchMain];
}
- (void)__expression {
if ([self speculate:...) {
if ([self predicts:...) {
[self _subExpression];
} else {
[self raise"No viable alternative found in rule 'expression'."];
}
}
[self match:EXPRESSIONPARSER_TOKEN_KIND_SEMI_COLON discard:NO];
[self fireDelegateSelectorselector(parser:didMatchExpression];
}
Best Answer-推荐答案 strong>
这里是 PEGKit 的开发者。
我认为当您考虑它时会很明显,PEGKit + 线程就是您正在寻找的东西。并且不需要为此向 PEGKit 添加额外的功能。
您正在寻找通过 PEGKit 暂停和恢复执行解析的功能。您已经可以通过线程访问此功能。
只需在后台线程上执行解析,并通过调用一个方法暂停该线程,该方法会一直阻塞,直到用户表示她想继续。这本质上与终端提供的环境/体验类型相同:在等待用户输入时执行和暂停。 (我自己用一些 thread utils I posted here 实现了这个东西。)
所以我认为将线程直接提供的所有功能添加到 PEGKit 是错误的方法。
如果您想跟踪 PEGKit 解析的状态,只需在解析器委托(delegate)回调中管理一堆方法名称。
关于ios - 暂停/继续解析 PEGKit 解析器?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/24557169/
|