All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jaskell.parsec.Between.scala Maven / Gradle / Ivy

package jaskell.parsec

import jaskell.parsec

import scala.util.Try

/**
 * Between parse the open parser, and then sub parser, and then close parser, return sub parser result if success.
 *
 * @author mars
 * @version 1.0.0
 */
class Between[E, T](val open: Parsec[E, _], val close: Parsec[E, _], val parsec: Parsec[E, T])
  extends Parsec[E, T] {

  def apply(s: State[E]): Try[T] = {
    for {
      _ <- open ? s
      re <- parsec ? s
      _ <- close ? s
    } yield re
  }
}

object Between {

  class Btw[E, T](val open: Parsec[E, _], val close: Parsec[E, _]) {
    def in(parsec: Parsec[E, T]) = new Between[E, T](this.open, this.close, parsec)
  }

  def apply[E, T](open: Parsec[E, _], close: Parsec[E, _]): (parsec: Parsec[E, T]) => Parsec[E, T] =  {
    return parser => new Between(open, close, parser)
  }

  def apply[E, T](open: Parsec[E, _], close: Parsec[E, _], parsec: Parsec[E, T]) =
    new Between[E, T](open, close, parsec)
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy