From 6c77594dafb3ecddd77b463a0b9fbfbaf622f198 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Sat, 15 Oct 2022 10:30:45 +0200 Subject: [PATCH] Migrate tryParser functions --- src_v2/parser/builder_api.nim | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src_v2/parser/builder_api.nim b/src_v2/parser/builder_api.nim index f97aaa6..b7546e4 100644 --- a/src_v2/parser/builder_api.nim +++ b/src_v2/parser/builder_api.nim @@ -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[