Migrate tryParser functions
This commit is contained in:
@@ -14,6 +14,30 @@ import ./parser_api
|
|||||||
|
|
||||||
# -- Builder API
|
# -- Builder API
|
||||||
|
|
||||||
|
proc tryParser*[T](
|
||||||
|
builder: Builder[T],
|
||||||
|
parser: Parser -> ParserResult,
|
||||||
|
): BuilderResult[T] =
|
||||||
|
## Try out a `parser` on a `builder`
|
||||||
|
## When succesful return the original builder, otherwise return an error
|
||||||
|
ParserResult.ok(Parser(
|
||||||
|
state: builder[0].state,
|
||||||
|
tokens: @[]
|
||||||
|
))
|
||||||
|
.flatMap(parser)
|
||||||
|
.foldTokens(
|
||||||
|
(err: ParserError) => BuilderResult[T].err((builder, "Error")),
|
||||||
|
(newTokens: seq[ParserToken]) => BuilderResult[T].ok(builder),
|
||||||
|
)
|
||||||
|
|
||||||
|
proc tryParser*[T](
|
||||||
|
builder: BuilderResult[T],
|
||||||
|
parser: Parser -> ParserResult,
|
||||||
|
): BuilderResult[T] =
|
||||||
|
## Try out a `parser` on a `builder` result
|
||||||
|
## When succesful return the ok builder, otherwise return an error
|
||||||
|
builder.flatMap((x: Builder[T]) => tryParser(x, parser))
|
||||||
|
|
||||||
proc tryTokenize*[T](
|
proc tryTokenize*[T](
|
||||||
builder: Builder[T],
|
builder: Builder[T],
|
||||||
builderFns: seq[tuple[
|
builderFns: seq[tuple[
|
||||||
|
|||||||
Reference in New Issue
Block a user