“解析失败时做某事”的更好解决方案?

时间:2014-02-23 15:01:41

标签: dart petitparser

当解析器失败时,我无法在petitparser中做某事。

我的解决方案是:

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

我想知道是否有更好的解决方案?

1 个答案:

答案 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));
}