Лучшее решение для "Делать что-то, когда анализ не удается"?

Я не могу что-то сделать, когда парсер не работает, в petitparser.

Мое решение:

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

Я хочу знать, есть ли лучшее решение?

1 ответ

Решение

Да, это выглядит разумно. Более общая форма

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));
}
Другие вопросы по тегам