Scala парсер комбинатор все кроме последнего - PullRequest
2 голосов
/ 14 февраля 2020

Как правильно проанализировать список, использующий все элементы, кроме последнего, используя scala парсер-комбинаторы? Например, если я хочу разобрать «спам, спам, спам, спам и яйца» в Список («спам», «спам», «спам», «спам») ~ «спам и яйца».

Если Я просто использую «спам». +, Тогда весь спам уничтожается, прежде чем я подхожу к «спаму и яйцам». Естественно, я мог бы сопоставить «и яйца», но на практике у меня уже мог быть сложный парсер «спама и яиц», который я бы не хотел изменять.

1 Ответ

3 голосов
/ 15 февраля 2020

Вот простая, но неэффективная версия:

def allButOne[T](p: Parser[T]): Parser[List[T]] = (p <~ guard(p)).+
...