当解析器失败时,我无法在petitparser中做某事。
我的解决方案是:
var parser = string("hello").or(
epsilon().map((_) {
// do something
}).seq(failure())
);
我想知道是否有更好的解决方案?
答案 0 :(得分:2)
是的,这看起来很合理。更一般的形式
var parser = string("hello")
.or(failure("Unable to parse hello"))
非常普遍。
但是,通常不建议在解析器中引入副作用。也就是说,您可以创建一个封装模式的函数,如下所示:
function handleFailure(Parser parser, Function action, String message) {
return parser.or(epsilon().map(action).failure(message));
}