class Reg[A] extends AnyRef
This class is used to index registers within the mutable state.
- Source
- registers.scala
- Since
2.2.0
- Note
it is undefined behaviour to use a register in multiple different independent parsers. You should be careful to parameterise the registers in shared parsers and allocate fresh ones for each "top-level" parser you will run.
- Grouped
- Alphabetic
- By Inheritance
- Reg
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
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( ... ) @native()
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
def
get: Parsley[A]
This combinator injects the value stored in this register into a parser.
This combinator injects the value stored in this register into a parser.
Allows for the value stored in this register to be purely injected into the parsing context. No input is consumed in this process, and it cannot fail.
- returns
a parser that returns the value stored in this register.
Get-Get Law:
r.get *> r.get == r.get r.get <~> r.get == r.get.map(x => (x, x))- Since
3.2.0
Example: -
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
gets[B](pf: Parsley[(A) ⇒ B]): Parsley[B]
This combinator injects the value stored in this register into a parser after applying a function obtained from a parser to it.
This combinator injects the value stored in this register into a parser after applying a function obtained from a parser to it.
First,
pfis parsed, producing the functionfon success. Then, the value stored in this registerxis applied to the functionf. The combinator returnsf(x). Onlypfis allowed to consume input. Ifpffails, the combinator fails, otherwise it will succeed.- B
the desired result type.
- pf
the parser that produces the function used to transform the value in this register.
- returns
the value stored in this register applied to a function generated from
pf.
- Since
3.2.0
-
def
gets[B](f: (A) ⇒ B): Parsley[B]
This combinator injects the value stored in this register into a parser after applying a function to it.
This combinator injects the value stored in this register into a parser after applying a function to it.
Allows for the value stored in this register to be purely injected into the parsing context but the function
fis applied first. No input is consumed in this process, and it cannot fail.- B
the desired result type.
- f
the function used to transform the value in this register.
- returns
the value stored in this register applied to
f.
- Since
3.2.0
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
def
local[B](f: (A) ⇒ A)(p: Parsley[B]): Parsley[B]
This combinator changed the value stored in this register for the duration of a given parser, resetting it afterwards.
This combinator changed the value stored in this register for the duration of a given parser, resetting it afterwards.
First get the current value in this register
xold, then placef(xold)into this register without any further effect. Then, parsep, producing resultyon success. Finally, putxoldback into this register and returny. Ifpfails, the whole combinator fails and the state is not restored.- f
the function used to modify the value in this register.
- p
the parser to execute with the adjusted state.
- returns
the parser that performs
pwith the modified state.
Put-Put Law and Put-Get Law:
r.put(x) *> r.local(f)(p) == r.put(f(x)) *> p <* r.put(x)
- Since
3.2.0
Example: -
def
local[B](p: Parsley[A])(q: ⇒ Parsley[B]): Parsley[B]
This combinator changed the value stored in this register for the duration of a given parser, resetting it afterwards.
This combinator changed the value stored in this register for the duration of a given parser, resetting it afterwards.
First get the current value in this register
xold, then parsepto get the resultx, placing it into this register without any further effect. Then, parseq, producing resultyon success. Finally, putxoldback into this register and returny. Ifporqfail, the whole combinator fails and the state is not restored.- p
the parser whose return value is placed in this register.
- q
the parser to execute with the adjusted state.
- returns
the parser that performs
qwith the modified state.
- Since
3.2.0
-
def
local[B](x: A)(p: Parsley[B]): Parsley[B]
This combinator changed the value stored in this register for the duration of a given parser, resetting it afterwards.
This combinator changed the value stored in this register for the duration of a given parser, resetting it afterwards.
First get the current value in this register
xold, then placexinto this register without any further effect. Then, parsep, producing resultyon success. Finally, putxoldback into this register and returny. Ifpfails, the whole combinator fails and the state is not restored.- x
the value to place into this register.
- p
the parser to execute with the adjusted state.
- returns
the parser that performs
pwith the modified statex.
Put-Put Law:
r.put(x) *> r.local(y)(p) == r.put(y) *> p <* r.put(x)
- Since
3.2.0
Example: -
def
modify(pf: Parsley[(A) ⇒ A]): Parsley[Unit]
This combinator modifies the value stored in this register with a function.
This combinator modifies the value stored in this register with a function.
First, parse
pfto obtain its resultf. Then get the value stored in this register,x, and put backf(x). Ifpfails this combinator fails.Equivalent to
this.put(this.gets(pf))
- pf
the parser that produces the function used to transform the value in this register.
- Since
3.2.0
-
def
modify(f: (A) ⇒ A): Parsley[Unit]
This combinator modifies the value stored in this register with a function.
This combinator modifies the value stored in this register with a function.
Without any other effect, get the value stored in this register,
x, and put backf(x).Equivalent to
this.put(this.gets(f))
- f
the function used to modify this register's value.
- Since
3.2.0
-
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
put(p: Parsley[A]): Parsley[Unit]
This combinator stores a new value into this register.
This combinator stores a new value into this register.
First, parse
pto obtain its resultx. Then storexinto this register without any further effect. Ifpfails this combinator fails.- p
the parser that produces the value to store in the register.
Get-Put Law:
r.put(r.get) == unit
, Put-Put Law:
// only when `q` does not inspect the value of `r`! r.put(p) *> r.put(q) == p *> r.put(q)- Since
3.2.0
Examples: -
def
put(x: A): Parsley[Unit]
This combinator stores a new value into this register.
This combinator stores a new value into this register.
Without any other effect, the value
xwill be placed into this register.- x
the value to place in the register.
Put-Get Law:
r.put(x) *> r.get == r.put(x) #> x
, Put-Put Law:
r.put(x) *> r.put(y) == r.put(y)
- Since
3.2.0
Examples: -
def
puts[B](p: Parsley[B], f: (B) ⇒ A): Parsley[Unit]
This combinator stores a new value into this register.
This combinator stores a new value into this register.
First, parse
pto obtain its resultx. Then storef(x)into this register without any further effect. Ifpfails this combinator fails.Equivalent to
this.put(p.map(f))- p
the parser that produces the value to store in the register.
- f
a function which adapts the result of
pso that it can fit into this register.
- Since
3.0.0
-
def
rollback[B](p: Parsley[B]): Parsley[B]
This combinator rolls-back any changes to this register made by a given parser if it fails.
This combinator rolls-back any changes to this register made by a given parser if it fails.
First get the current value in this register
xold. Then parsep, if it succeeds, producingy, thenyis returned and this register retains its value post-p. Otherwise, ifpfailed without consuming input,xoldis placed back into this register and this combinator fails.This can be used in conjunction with local to make an almost unconditional state restore:
// `r`'s state is always rolled back after `p` unless it fails having consumed input. r.rollback(r.local(x)(p))- p
the parser to perform.
- returns
the result of the parser
p, if any.
- Since
3.2.0
-
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( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
Getters
These combinators allow for the retrieval of the stateful value of a register, and injecting it into the parsing context. Does not modify the contents of the register itself.
Setters
These combinators directly update the value contained within a register. This new value can be provided directly or sourced from a parser.
Modification
These combinators modify the value stored within a register by using a function. The function used can be provided directly or sourced from a parser.
Local Modification
These combinators allow for some form of local stateful modification. This means that any changes to the register may be reverted after the execution of the parser: this may be on the parsers success, but it could also involve the parsers failure.