object mixed
This module contains specialist combinators for mixing unary and binary operators on the same level. This is only sensible when mixing infix-left and postfix or infix-right and prefix.
- Source
- mixed.scala
- Since
4.0.0
- Note
the behaviour of the enclosed combinators may be counter intuitive: they should not be used unless you know what you are doing.
- Alphabetic
- By Inheritance
- mixed
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def left1[A, B, C >: B](p: Parsley[A], uop: => Parsley[(C) => C], bop: => Parsley[(C, A) => B])(implicit wrap: (A) => C): Parsley[C]
This combinator handles left-associative parsing, and application of, zero or more binary operators and postfix unary operators between/before one or more values.
This combinator handles left-associative parsing, and application of, zero or more binary operators and postfix unary operators between/before one or more values.
First parse
p
, then parse either auop
or anop
followed by ap
, repeatedly. The results of thep
s,x1
throughxn
, are combined with the results of thebop
s,f1
throughfn-1
, and theuop
s,g1,1
throughgm,i
, with left-associative application:gm,i(gm,i-1(..gm,1(fn-1(..f1(g1,j(..g1,1(x1)..)), ..
. This application is then returned as the result of the combinator. Ifp
,uop
, orbop
fails having consumed input at any point, the whole combinator fails.- A
the type of the values.
- B
the type returned by the operator, which must be a subtype of the result type
C
.- C
the result type of the chain, which also fits into the recursive application site of the operators.
- p
the value to be parsed.
- uop
the operator before each binary application.
- bop
the operator between each value.
- wrap
a function that can convert the value type into the result type, this is provided automatically when
A <:< C
.- returns
a parser that parses alternating
p
,uop
, andbop
, ending in ap
and applies their results left-associatively.
scala> import parsley.expr.mixed, parsley.character.{digit, char} scala> sealed trait Expr scala> case class B(l: Expr, r: C) extends Expr scala> case class U(c: Expr) extends Expr scala> case class C(x: Char) extends Expr scala> val p = mixed.left1(digit.map(Constant), char('?') #> U, char('+') #> B) scala> p.parse("1?+2+3??") val res0 = Success(U(U(B(B(U(C('1')), C('2')), C('3')))))
- Since
4.0.0
- Note
if you know this is what you are looking for, you have found it: otherwise, this is not what you are looking for.
Example: - final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- def right1[A, B, C >: B](p: Parsley[A], uop: Parsley[(C) => C], bop: => Parsley[(A, C) => B])(implicit wrap: (A) => C): Parsley[C]
This combinator handles right-associative parsing, and application of, zero or more binary operators and prefix unary operators between/before one or more values.
This combinator handles right-associative parsing, and application of, zero or more binary operators and prefix unary operators between/before one or more values.
First parse
p
, then parse either auop
or anop
followed by ap
, repeatedly. The results of thep
s,x1
throughxn
, are combined with the results of thebop
s,f1
throughfn-1
, and theuop
s,g1,1
throughgm,i
, with right-associative application:g1,1(g1,2(..g1,i(f1(x1, g2,1(..g2,j(f2(x2,..
. This application is then returned as the result of the combinator. Ifp
,uop
, orbop
fails having consumed input at any point, the whole combinator fails.- A
the type of the values.
- B
the type returned by the operator, which must be a subtype of the result type
C
.- C
the result type of the chain, which also fits into the recursive application site of the operators.
- p
the value to be parsed.
- uop
the operator before each binary application.
- bop
the operator between each value.
- wrap
a function that can convert the value type into the result type, this is provided automatically when
A <:< C
.- returns
a parser that parses alternating
p
,uop
, andbop
, ending in ap
and applies their results right-associatively.
scala> import parsley.expr.mixed, parsley.character.{digit, char} scala> sealed trait Expr scala> case class B(l: C, r: Expr) extends Expr scala> case class U(c: Expr) extends Expr scala> case class C(x: Char) extends Expr scala> val p = mixed.right1(digit.map(C), char('-') #> U, char('+') #> B) scala> p.parse("-1+--2+3") val res0 = Success(U(B(C('1'), U(U(B(C('2'), C('3')))))))
- Since
4.0.0
- Note
if you know this is what you are looking for, you have found it: otherwise, this is not what you are looking for.
Example: - final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()