2013-06-02 2 views
3

Parsec документ говорит следующее о <|>Выбор оператора в библиотеке Haskell пс в

Этот комбинатор реализует выбор. Сначала используется парсер p < |> q. Если это удается, возвращается значение p. Если p терпит неудачу без , потребляющего любой вход, выполняется попытка анализатора q. Этот комбинатор определен , равный члену mplus класса MonadPlus, и (Control.Applicative. < |>) членом Control.Applicative.Alternative.

Как реализовать обратную версию версии <|>? Он возвращается, когда p потребляет любой вход, поэтому q может быть применен к полному вводу снова.

ответ

2

Чтобы включить обратный поиск, вам просто нужно использовать try, например. try p <|> q.

Обратите внимание, что чрезмерное использование try может повредить производительность вашего синтаксического анализа. Рассмотрите left factoring свою грамматику вместо этого, чтобы устранить распространенные префиксы, где это возможно.