abstract class Parser[+T] extends (Input) ⇒ ParseResult[T]
The root class of parsers. Parsers are functions from the Input type to ParseResult.
- Source
- Parsers.scala
- Alphabetic
- By Inheritance
- Parser
- Function1
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
- new Parser()
Abstract Value Members
-
abstract
def
apply(in: Input): ParseResult[T]
An unspecified method that defines the behaviour of this parser.
An unspecified method that defines the behaviour of this parser.
- Definition Classes
- Parser → Function1
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
def
*[U >: T](sep: ⇒ Parser[(U, U) ⇒ U]): Parser[U]
Returns a parser that repeatedly parses what this parser parses, interleaved with the
sep
parser.Returns a parser that repeatedly parses what this parser parses, interleaved with the
sep
parser. Thesep
parser specifies how the results parsed by this parser should be combined.- returns
chainl1(this, sep)
-
def
*: Parser[List[T]]
Returns a parser that repeatedly parses what this parser parses.
Returns a parser that repeatedly parses what this parser parses.
- returns
rep(this)
-
def
+: Parser[List[T]]
Returns a parser that repeatedly (at least once) parses what this parser parses.
Returns a parser that repeatedly (at least once) parses what this parser parses.
- returns
rep1(this)
-
def
<~[U](q: ⇒ Parser[U]): Parser[T]
A parser combinator for sequential composition which keeps only the left result.
A parser combinator for sequential composition which keeps only the left result.
p <~ q
succeeds ifp
succeeds andq
succeeds on the input left over byp
.- q
a parser that will be executed after
p
(this parser) succeeds -- evaluated at most once, and only when necessary- returns
a
Parser
that -- on success -- returns the result ofp
.
- Annotations
- @migration
- Migration
(Changed in version 2.9.0) The call-by-name argument is evaluated at most once per constructed Parser object, instead of on every need that arises during parsing.
- Note
<~ has lower operator precedence than ~ or ~>.
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
>>[U](fq: (T) ⇒ Parser[U]): Parser[U]
Returns
into(fq)
. -
def
?: Parser[Option[T]]
Returns a parser that optionally parses what this parser parses.
Returns a parser that optionally parses what this parser parses.
- returns
opt(this)
-
def
^?[U](f: PartialFunction[T, U]): Parser[U]
A parser combinator for partial function application.
A parser combinator for partial function application.
p ^? f
succeeds if
psucceeds AND
fis defined at the result of
p; in that case, it returns
fapplied to the result of
p.
- f
a partial function that will be applied to this parser's result (see
mapPartial
inParseResult
).- returns
a parser that succeeds if the current parser succeeds and
f
is applicable to the result. If so, the result will be transformed byf
.
-
def
^?[U](f: PartialFunction[T, U], error: (T) ⇒ String): Parser[U]
A parser combinator for partial function application.
A parser combinator for partial function application.
p ^? (f, error)
succeeds if
psucceeds AND
fis defined at the result of
p; in that case, it returns
fapplied to the result of
p. If
fis not applicable, error(the result of
p) should explain why.
- f
a partial function that will be applied to this parser's result (see
mapPartial
inParseResult
).- error
a function that takes the same argument as
f
and produces an error message to explain whyf
wasn't applicable- returns
a parser that succeeds if the current parser succeeds and
f
is applicable to the result. If so, the result will be transformed byf
.
-
def
^^[U](f: (T) ⇒ U): Parser[U]
A parser combinator for function application.
A parser combinator for function application.
p ^^ f
succeeds if
psucceeds; it returns
fapplied to the result of
p.
- f
a function that will be applied to this parser's result (see
map
inParseResult
).- returns
a parser that has the same behaviour as the current parser, but whose result is transformed by
f
.
-
def
^^^[U](v: ⇒ U): Parser[U]
A parser combinator that changes a successful result into the specified value.
A parser combinator that changes a successful result into the specified value.
p ^^^ v
succeeds if
psucceeds; discards its result, and returns
vinstead.
- v
The new result for the parser, evaluated at most once (if
p
succeeds), not evaluated at all ifp
fails.- returns
a parser that has the same behaviour as the current parser, but whose successful result is
v
- Annotations
- @migration
- Migration
(Changed in version 2.9.0) The call-by-name argument is evaluated at most once per constructed Parser object, instead of on every need that arises during parsing.
-
def
andThen[A](g: (ParseResult[T]) ⇒ A): (Input) ⇒ A
- Definition Classes
- Function1
- Annotations
- @unspecialized()
-
def
append[U >: T](p0: ⇒ Parser[U]): Parser[U]
- Annotations
- @migration
- Migration
(Changed in version 2.9.0) The call-by-name argument is evaluated at most once per constructed Parser object, instead of on every need that arises during parsing.
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
-
def
compose[A](g: (A) ⇒ Input): (A) ⇒ ParseResult[T]
- Definition Classes
- Function1
- Annotations
- @unspecialized()
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def filter(p: (T) ⇒ Boolean): Parser[T]
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
- def flatMap[U](f: (T) ⇒ Parser[U]): Parser[U]
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
into[U](fq: (T) ⇒ Parser[U]): Parser[U]
A parser combinator that parameterizes a subsequent parser with the result of this one.
A parser combinator that parameterizes a subsequent parser with the result of this one.
Use this combinator when a parser depends on the result of a previous parser.
p
should be a function that takes the result from the first parser and returns the second parser.p into fq
(withfq
typically{x => q}
) first appliesp
, and then, ifp
successfully returned resultr
, appliesfq(r)
to the rest of the input.From: G. Hutton. Higher-order functions for parsing. J. Funct. Program., 2(3):323--343, 1992.
- fq
a function that, given the result from this parser, returns the second parser to be applied
- returns
a parser that succeeds if this parser succeeds (with result
x
) and if thenfq(x)
succeeds
def perlRE = "m" ~> (".".r into (separator => """[^%s]*""".format(separator).r <~ separator))
Example: -
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def map[U](f: (T) ⇒ U): Parser[U]
- def named(n: String): Parser.this.type
-
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()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- Parser → Function1 → 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
- @native() @throws( ... )
-
def
withErrorMessage(msg: String): Parser[T]
Changes the error message produced by a parser.
Changes the error message produced by a parser.
This doesn't change the behavior of a parser on neither success nor failure, just on error. The semantics are slightly different than those obtained by doing
| error(msg)
, in that the message produced by this method will always replace the message produced, which is not guaranteed by that idiom.For example, parser
p
below will always produce the designated error message, whileq
will not produce it ifsign
is parsed butnumber
is not.def p = sign.? ~ number withErrorMessage "Number expected!" def q = sign.? ~ number | error("Number expected!")
- msg
The message that will replace the default error message.
- returns
A parser with the same properties and different error message.
-
def
withFailureMessage(msg: String): Parser[T]
Changes the failure message produced by a parser.
Changes the failure message produced by a parser.
This doesn't change the behavior of a parser on neither success nor error, just on failure. The semantics are slightly different than those obtained by doing
| failure(msg)
, in that the message produced by this method will always replace the message produced, which is not guaranteed by that idiom.For example, parser
p
below will always produce the designated failure message, whileq
will not produce it ifsign
is parsed butnumber
is not.def p = sign.? ~ number withFailureMessage "Number expected!" def q = sign.? ~ number | failure("Number expected!")
- msg
The message that will replace the default failure message.
- returns
A parser with the same properties and different failure message.
- def withFilter(p: (T) ⇒ Boolean): Parser[T]
-
def
|[U >: T](q: ⇒ Parser[U]): Parser[U]
A parser combinator for alternative composition.
A parser combinator for alternative composition.
p | q
succeeds ifp
succeeds orq
succeeds. Note thatq
is only tried ifp
s failure is non-fatal (i.e., back-tracking is allowed).- q
a parser that will be executed if
p
(this parser) fails (and allows back-tracking)- returns
a
Parser
that returns the result of the first parser to succeed (out ofp
andq
) The resulting parser succeeds if (and only if)p
succeeds, or- if
p
fails allowing back-tracking andq
succeeds.
-
def
|||[U >: T](q0: ⇒ Parser[U]): Parser[U]
A parser combinator for alternative with longest match composition.
A parser combinator for alternative with longest match composition.
p ||| q
succeeds ifp
succeeds orq
succeeds. Ifp
andq
both succeed, the parser that consumed the most characters accepts.- q0
a parser that accepts if p consumes less characters. -- evaluated at most once, and only when necessary
- returns
a
Parser
that returns the result of the parser consuming the most characters (out ofp
andq
).
- Annotations
- @migration
- Migration
(Changed in version 2.9.0) The call-by-name argument is evaluated at most once per constructed Parser object, instead of on every need that arises during parsing.
-
def
~[U](q: ⇒ Parser[U]): Parser[~[T, U]]
A parser combinator for sequential composition.
A parser combinator for sequential composition.
p ~ q
succeeds ifp
succeeds andq
succeeds on the input left over byp
.- q
a parser that will be executed after
p
(this parser) succeeds -- evaluated at most once, and only when necessary.- returns
a
Parser
that -- on success -- returns a~
(like aPair
, but easier to pattern match on) that contains the result ofp
and that ofq
. The resulting parser fails if eitherp
orq
fails.
- Annotations
- @migration
- Migration
(Changed in version 2.9.0) The call-by-name argument is evaluated at most once per constructed Parser object, instead of on every need that arises during parsing.
-
def
~![U](p: ⇒ Parser[U]): Parser[~[T, U]]
A parser combinator for non-back-tracking sequential composition.
A parser combinator for non-back-tracking sequential composition.
p ~! q
succeeds ifp
succeeds andq
succeeds on the input left over byp
. In case of failure, no back-tracking is performed (in an earlier parser produced by the|
combinator).- p
a parser that will be executed after
p
(this parser) succeeds- returns
a
Parser
that -- on success -- returns a~
(like a Pair, but easier to pattern match on) that contains the result ofp
and that ofq
. The resulting parser fails if eitherp
orq
fails, this failure is fatal.
-
def
~>[U](q: ⇒ Parser[U]): Parser[U]
A parser combinator for sequential composition which keeps only the right result.
A parser combinator for sequential composition which keeps only the right result.
p ~> q
succeeds ifp
succeeds andq
succeeds on the input left over byp
.- q
a parser that will be executed after
p
(this parser) succeeds -- evaluated at most once, and only when necessary.- returns
a
Parser
that -- on success -- returns the result ofq
.
- Annotations
- @migration
- Migration
(Changed in version 2.9.0) The call-by-name argument is evaluated at most once per constructed Parser object, instead of on every need that arises during parsing.