我有一个从PEGKit创建的解析器(此处的示例项目)。
我想暂停解析,而不停止主线程。由于PEGKit
具有无限回溯并且知道光标/头部在输入字符串处的位置,因此应该可以恢复解析。
这将非常有帮助,因此我可以逐步创建解析器。所以解析器必须等待一个 ui 动作,比如按下UIButton
.
如何实现或暂停然后恢复解析?
例如,我想在到达某个符号时暂停解析。这是在;
(分号或EXPRESSIONPARSER_TOKEN_KIND_SEMI_COLON
)之后。
所以在令牌之后;
应该保存状态,所以我可以从这个位置返回和解析。
代码:
- (void)start {
[self main_];
[self matchEOF:YES];
}
- (void)__main {
while ([self speculate:^{ [self expression_]; }]) {
[self expression_];
}
[self fireDelegateSelector:@selector(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 fireDelegateSelector:@selector(parser:didMatchExpression:)];
}