1

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

我的解决方案是:

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

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

4

1 回答 1

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));
}
于 2014-02-23T23:07:30.110 回答