Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 更好的解决方案;当解析失败时做什么;?_Dart_Petitparser - Fatal编程技术网

Dart 更好的解决方案;当解析失败时做什么;?

Dart 更好的解决方案;当解析失败时做什么;?,dart,petitparser,Dart,Petitparser,在petitparser中,我无法在解析器失败时执行某些操作 我的解决办法是: var parser = string("hello").or( epsilon().map((_) { // do something }).seq(failure()) ); 我想知道是否有更好的解决办法 是的,这看起来很合理。更一般的形式 var parser=string(“你好”) .或(失败(“无法解析hello”)) 这很常见 然而,通常

在petitparser中,我无法在解析器失败时执行某些操作

我的解决办法是:

var parser = string("hello").or(
        epsilon().map((_) {
          // do something
        }).seq(failure())
     );

我想知道是否有更好的解决办法

是的,这看起来很合理。更一般的形式

var parser=string(“你好”)
.或(失败(“无法解析hello”))
这很常见

然而,通常不建议在解析器中引入副作用。也就是说,您可以创建一个封装模式的函数,如下所示:

函数handleFailure(解析器、函数操作、字符串消息){
返回parser.or(epsilon().map(action).failure(message));
}

谢谢你,卢卡斯!我正在尝试实现此问题的嵌套块解析器:。我使用了一个堆栈来保存每个新的开始分隔符,如果它没有得到相应的停止分隔符,我必须删除顶部的那个。这就是为什么我需要这个
副作用
我认为自我修改解析器带来的问题比它解决的要多。如果您实现自己的
解析器
子类,可能会更简单一些,类似于
TrimmingParser
?这对我来说是个新想法。我以后再试试