OGeek|极客世界-中国程序员成长平台

标题: ios - 暂停/继续解析 PEGKit 解析器? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 23:39
标题: ios - 暂停/继续解析 PEGKit 解析器?

我有一个从 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-推荐答案


这里是 PEGKit 的开发者。

我认为当您考虑它时会很明显,PEGKit + 线程就是您正在寻找的东西。并且不需要为此向 PEGKit 添加额外的功能。

您正在寻找通过 PEGKit 暂停和恢复执行解析的功能。您已经可以通过线程访问此功能。

只需在后台线程上执行解析,并通过调用一个方法暂停该线程,该方法会一直阻塞,直到用户表示她想继续。这本质上与终端提供的环境/体验类型相同:在等待用户输入时执行和暂停。 (我自己用一些 thread utils I posted here 实现了这个东西。)

所以我认为将线程直接提供的所有功能添加到 PEGKit 是错误的方法。

如果您想跟踪 PEGKit 解析的状态,只需在解析器委托(delegate)回调中管理一堆方法名称。

关于ios - 暂停/继续解析 PEGKit 解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24557169/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4