Parser
Parser[A]
is a Parser0[A]
that will always consume one-or-more
characters on a successful parse.
characters on a successful parse.
Since Parser is guaranteed to consume input it provides additional
methods which would be unsafe when used on parsers that succeed
without consuming input, such as
methods which would be unsafe when used on parsers that succeed
without consuming input, such as
rep0
.When a Parser is composed with a Parser0 the result is usually a
Parser. Parser overrides many of Parser0's methods to refine the
return type. In other cases, callers may need to use the
helper method to refine the type of their expressions.
Parser. Parser overrides many of Parser0's methods to refine the
return type. In other cases, callers may need to use the
with1
helper method to refine the type of their expressions.
Parser doesn't provide any additional guarantees over Parser0 on
what kind of parsing failures it can return.
what kind of parsing failures it can return.
- Companion
- object
Value members
Methods
If this parser fails to parse its input with an epsilon error,
try the given parser instead.
try the given parser instead.
This method is similar to Parser0#orElse, but since both arguments
are known to be Parser values, the result is known to be a
Parser as well.
are known to be Parser values, the result is known to be a
Parser as well.
Use this parser to parse zero-or-more values.
This parser may succeed without consuming input in the case where
zero values are parsed.
zero values are parsed.
If the underlying parser hits an arresting failure, the entire
parse is also an arresting failure. If the underlying parser hits
an epsilon failure, the parsed values (if any) are returned in a
list as a successful parse.
parse is also an arresting failure. If the underlying parser hits
an epsilon failure, the parsed values (if any) are returned in a
list as a successful parse.
Use this parser to parse at least
min
values (where min >= 0
).If
input in the case where zero values are parsed. If
known to be greater than zero, consider using
instead.
min
is zero, this parser may succeed without consuminginput in the case where zero values are parsed. If
min
isknown to be greater than zero, consider using
rep(min)
instead.
Like
result in an arresting failure. Unlike
also return an arresting failure if it has not parsed at least
rep0
, arresting failures in the underlying parser willresult in an arresting failure. Unlike
rep0
, this method mayalso return an arresting failure if it has not parsed at least
min
values (but has consumed input).Repeat the parser
min
or more times, but no more than max
The parser fails if it can't match at least
After repeating the parser
min
timesAfter repeating the parser
max
times, the parser completes successfully- Throws
- java.lang.IllegalArgumentException
- java.lang.IllegalArgumentException
Use this parser to parse one-or-more values.
This parser behaves like
least one value, and is guaranteed to consume input on successful
parses.
rep0
, except that it must produce atleast one value, and is guaranteed to consume input on successful
parses.
Use this parser to parse at least
min
values (where min >= 1
).This method behaves likes
values are produced an arresting failure will be returned.
rep
, except that if fewer than min
values are produced an arresting failure will be returned.
Repeat the parser
min
or more times, but no more than max
The parser fails if it can't match at least
After repeating the parser
min
timesAfter repeating the parser
max
times, the parser completes successfully- Throws
- java.lang.IllegalArgumentException
- java.lang.IllegalArgumentException
Repeat the parser 0 or more times, but no more than
max
It may seem weird to accept 0 here, but without, composing
this method becomes more complex.
Since and empty parse is possible for this method, we do
allow max = 0
this method becomes more complex.
Since and empty parse is possible for this method, we do
allow max = 0
- Throws
- java.lang.IllegalArgumentException
- java.lang.IllegalArgumentException
- Note
- this can wind up parsing nothing
Repeat the parser
min
or more timesThe parser fails if it can't match at least
min
times- Throws
- java.lang.IllegalArgumentException
- java.lang.IllegalArgumentException
Repeat the parser
min
or more times, but no more than max
The parser fails if it can't match at least
After repeating the parser
min
timesAfter repeating the parser
max
times, the parser completes successfully- Throws
- java.lang.IllegalArgumentException
- java.lang.IllegalArgumentException
Repeat the parser exactly
times
times- Throws
- java.lang.IllegalArgumentException
- java.lang.IllegalArgumentException
Repeat
min
or more times with a separator.- Throws
- java.lang.IllegalArgumentException
- java.lang.IllegalArgumentException
Repeat
min
or more, up to max
times with a separator.- Throws
- java.lang.IllegalArgumentException
- java.lang.IllegalArgumentException
Repeat
min
or more times with a separator, at least once.- Throws
- java.lang.IllegalArgumentException
- java.lang.IllegalArgumentException
Repeat
min
or more, up to max
times with a separator, at least once.- Throws
- java.lang.IllegalArgumentException
- java.lang.IllegalArgumentException
Inherited methods
Wrap this parser in a helper class, enabling better composition
with
with
Parser
values.For example, with
p: Parser0[Int]
and p1: Parser0[Double]
:val a1: Parser0[(Int, Double)]
= p ~ p1
val a2: Parser[(Int, Double)] = p.with1 ~ p1
val a2: Parser[(Int, Double)] = p.with1 ~ p1
val b1: Parser0[Double]
= p *> p1
val b2: Parser[Double] = p.with1 *> p1
val b2: Parser[Double] = p.with1 *> p1
val c1: Parser0[Int]
= p <* p1
val c2: Parser[Int] = p.with1 <* p1
val c2: Parser[Int] = p.with1 <* p1
Without using
since they are not known to return
with1
, these methods will return Parser0
valuessince they are not known to return
Parser
values instead.- Inhertied from
- Parser0
Return a parser that succeeds (consuming nothing, and extracting
nothing) if the current parser would fail.
nothing) if the current parser would fail.
This parser expects the underlying parser to fail, and will
unconditionally backtrack after running it.
unconditionally backtrack after running it.
- Inhertied from
- Parser0
If this parser fails to parse its input with an epsilon error,
try the given parser instead.
try the given parser instead.
If this parser fails with an arresting error, the next parser
won't be tried.
won't be tried.
Backtracking may be used on the left parser to allow the right
one to pick up after any error, resetting any state that was
modified by the left parser.
one to pick up after any error, resetting any state that was
modified by the left parser.
- Inhertied from
- Parser0
Return a parser that succeeds (consuming nothing and extracting
nothing) if the current parser would also succeed.
nothing) if the current parser would also succeed.
This parser expects the underlying parser to succeed, and will
unconditionally backtrack after running it.
unconditionally backtrack after running it.
- Inhertied from
- Parser0
Attempt to parse all of the input
str
into an A
value.This method will return a failure unless all of
during parsing.
str
is consumedduring parsing.
p.parseAll(s)
is equivalent to (p <* Parser.end).parse(s).map(_._2)
.- Inhertied from
- Parser0
If this parser fails to parse its input with an epsilon error,
try the given parser instead.
try the given parser instead.
If this parser fails with an arresting error, the next parser
won't be tried.
won't be tried.
Backtracking may be used on the left parser to allow the right
one to pick up after any error, resetting any state that was
modified by the left parser.
one to pick up after any error, resetting any state that was
modified by the left parser.
This method is similar to Parser#orElse but returns Either.
- Inhertied from
- Parser0
Attempt to parse an
A
value out of str
.This method will either return a failure, or else the remaining
string and the parsed value.
string and the parsed value.
To require the entire input to be consumed, see
parseAll
.- Inhertied from
- Parser0
Convert epsilon failures into None values.
Normally if a parser fails to consume any input it fails with an
epsilon failure. The
None values (and wraps other values in
epsilon failure. The
?
method converts these failures intoNone values (and wraps other values in
Some(_)
).If the underlying parser failed with other errors, this parser
will still fail.
will still fail.
- Inhertied from
- Parser0