Getting parser error

This commit is contained in:
Florian Schroedl
2022-10-17 15:08:56 +02:00
parent 6c77594daf
commit 2727cf1821
5 changed files with 72 additions and 58 deletions

View File

@@ -14,30 +14,6 @@ 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[

View File

@@ -65,6 +65,14 @@ proc tryParser*[T](
(newTokens: seq[ParserToken]) => BuilderResult[T].ok(builder),
)
proc tryParserResult*[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))
when isMainModule:
type TestStringBuilderT* = string
type TestStringBuilder* = Builder[TestStringBuilderT]