Migrate tryParser functions

This commit is contained in:
Florian Schroedl
2022-10-15 10:30:45 +02:00
parent 8d35a273fd
commit 6c77594daf

View File

@@ -14,6 +14,30 @@ import ./parser_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](
builder: Builder[T],
builderFns: seq[tuple[