Dart 更好的解决方案;当解析失败时做什么;?
在petitparser中,我无法在解析器失败时执行某些操作 我的解决办法是:Dart 更好的解决方案;当解析失败时做什么;?,dart,petitparser,Dart,Petitparser,在petitparser中,我无法在解析器失败时执行某些操作 我的解决办法是: var parser = string("hello").or( epsilon().map((_) { // do something }).seq(failure()) ); 我想知道是否有更好的解决办法 是的,这看起来很合理。更一般的形式 var parser=string(“你好”) .或(失败(“无法解析hello”)) 这很常见 然而,通常
var parser = string("hello").or(
epsilon().map((_) {
// do something
}).seq(failure())
);
我想知道是否有更好的解决办法 是的,这看起来很合理。更一般的形式
var parser=string(“你好”)
.或(失败(“无法解析hello”))
这很常见
然而,通常不建议在解析器中引入副作用。也就是说,您可以创建一个封装模式的函数,如下所示:
函数handleFailure(解析器、函数操作、字符串消息){
返回parser.or(epsilon().map(action).failure(message));
}
谢谢你,卢卡斯!我正在尝试实现此问题的嵌套块解析器:。我使用了一个堆栈来保存每个新的开始分隔符,如果它没有得到相应的停止分隔符,我必须删除顶部的那个。这就是为什么我需要这个副作用
我认为自我修改解析器带来的问题比它解决的要多。如果您实现自己的解析器
子类,可能会更简单一些,类似于TrimmingParser
?这对我来说是个新想法。我以后再试试