Лучшее решение для "Делать что-то, когда анализ не удается"?
Я не могу что-то сделать, когда парсер не работает, в 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));
}