From 5dca3d01f5bcb1d22565f03976c8dfbc3dc32f8c Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 20 Jan 2022 17:00:00 +0100 Subject: [PATCH] Helper methods --- src/test.nim | 61 ++++++++++++++-------------------------------------- 1 file changed, 16 insertions(+), 45 deletions(-) diff --git a/src/test.nim b/src/test.nim index 80c9fdc..04d1ec1 100644 --- a/src/test.nim +++ b/src/test.nim @@ -34,6 +34,12 @@ type ParserResult* = Result[Parser, (Parser, string)] +func getOrElse*[T, E](self: Result[T, E], otherwise: T): T = + if self.isOk(): + self.v + else: + otherwise + proc indentKey(x: string, count: int): string = var y = x.indent(count) y.delete(0..count - 1) @@ -108,50 +114,15 @@ func str(s: string): (Parser -> ParserResult) {.inline.} = p = p.flatMap(ch(c)) return p -# func str(s1: string): (Parser -> ParserResult) {.inline.} = -# return func(parser: Parser): ParserResult = -# return parser.flatMap(x => parseSeq(@[ch('F')])) -# type R = Result[int, string] +when isMainModule: + let fooParser = initParser("FOO_BAR") + .parseSeq(@[ + str("FOO"), + ignore(ch('_')), + ch('B'), + ch('A'), + ch('R'), + ]) -# echo R.ok 4 - -# let i = 3 - -# echo $("FOO"[i]) - -let fooParser = initParser("FOO_BAR").parseSeq(@[ - str("FOO"), - ignore(ch('_')), - ignore(ch('_')), - ignore(ch('_')), - ignore(ch('_')), - ch('B'), - ch('A'), - ch('R'), -]) - -echo fooParser - - -# echo initParser("FUo") -# .flatMap(ch('F')) -# .flatMap(ch('o')) -# .flatMap(ch('o')) - # .flatMap((x: Parser) => ch(x, c = 'o')) - # .flatMap((x: Parser) => ch(x, c = 'o')) - -# proc parseStars - -# proc parseHeadline(parser: ParserResult[OrgElement]): ParserResult[OrgElement] = -# parser -# .flatMap(parseA) -# # flatMapOptionalToken( -# # content = -# # ) -# # flatMapToken( -# # content = -# # ) -# # flatMapToken( -# # tags -# # ) + echo fooParser