Migrate tryParser functions
This commit is contained in:
@@ -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[
|
||||
|
||||
Reference in New Issue
Block a user