parsley.syntax
Members list
Type members
Classlikes
Provides implicit conversions for characters and strings into parsers.
Provides implicit conversions for characters and strings into parsers.
The use of char
and string
can be distracting to the overall structure of the parser with respect to the grammar. This module exposes combinators that can implicitly convert Scala's string and character literals so that they represent parsers. These will not be whitespace sensitive.
Attributes
- Since
-
4.5.0
- Source
- character.scala
- Supertypes
- Self type
-
character.type
These implicit classes can be used to extend the core combinator set of Parsley.
These implicit classes can be used to extend the core combinator set of Parsley.
This may mean that importing them enables combinators that can be used on non-Parsley
types, or might enable some syntactic sugar that is not part of the core combinator "style".#
Attributes
- Since
-
4.5.0
- Source
- extension.scala
- Supertypes
- Self type
-
extension.type
This module provides the "lift
syntax", which enables a lift
combinator on functions of arities up to 22, applying the function across the results of several parsers.
This module provides the "lift
syntax", which enables a lift
combinator on functions of arities up to 22, applying the function across the results of several parsers.
Attributes
- Since
-
4.5.0
- Note
-
a limitation of this syntax is that it requires the function's type to be fully known. For a version of this syntax that behaves better with type inference, see
zipped
. - Example
-
scala> import parsley.character.char scala> import parsley.syntax.lift.{Lift2, Lift3} scala> case class Add(x: Int, y: Int) scala> val p = Add.lift(char('a').as(4), char('b').as(5)) scala> p.parse("ab") val res0 = Success(Add(4, 5)) scala> val f = (x: Int, y: Int, z: Int) => x * y + z scala> val q = f.lift(char('a').as(3), char('b').as(2), char('c').as(5)) scala> q.parse("abc") val res1 = Success(11) scala> q.parse("ab") val res2 = Failure(..)
- Source
- lift.scala
- Supertypes
- Self type
-
lift.type
This module provides alternatives to the f.lift(x, y)
syntax, (x, y).zipped(f)
, which works better with type inference.
This module provides alternatives to the f.lift(x, y)
syntax, (x, y).zipped(f)
, which works better with type inference.
Also enables a parameterless zipped
method, to pair an arbitrary number of parsers such that (p, q).zipped = p.zip(q)
.
Thanks to Andrei Gramescu and George Stacey for ensuring that these combinators even exist in the first place.
Attributes
- Since
-
4.5.0
- Note
-
these methods are not lazy like the
lift
syntax orliftN
functions! Use the prefix~
combinator to make arguments lazy where necessary. - Example
-
scala> import parsley.character.char scala> import parsley.syntax.zipped.{Zipped2, Zipped3} scala> case class Add(x: Int, y: Int) scala> val p = (char('a').as(4), char('b').as(5)).zipped(Add) scala> p.parse("ab") val res0 = Success(Add(4, 5)) scala> val q = (char('a').as(3), char('b').as(2), char('c').as(5)).zipped((x, y, z) => x * y + z) scala> q.parse("abc") val res1 = Success(11) scala> q.parse("ab") val res2 = Failure(..)
- Source
- zipped.scala
- Supertypes
- Self type
-
zipped.type