diff --git a/src_v2/parser/parser_internals.nim b/src_v2/parser/parser_internals.nim index ec8fbce..4b0f8a9 100644 --- a/src_v2/parser/parser_internals.nim +++ b/src_v2/parser/parser_internals.nim @@ -248,6 +248,17 @@ when isMainModule: block testBlockChar: let ch1 = ch('1') + let ch2 = ch('2') + let ch3 = ch('3') let chDigits = ch(Digits) + assert testParser123.flatMap(ch1).tokensToString() == "1" assert testParser123.flatMap(chDigits).tokensToString() == "1" + + # Mismatch + assert testParser123.flatMap(ch('2')).error().kind == charMismatchErr + assert testParser123.flatMap(ch(Letters)).error().kind == charMismatchErr + + # Out of bounds + assert initParserResult("").flatMap(ch1).error().kind == endOfStringErr + assert initParserResult("1").flatMap(ch1).flatMap(ch1).error().kind == endOfStringErr diff --git a/src_v2/parser/parser_types.nim b/src_v2/parser/parser_types.nim index 82b519b..62b7b6b 100644 --- a/src_v2/parser/parser_types.nim +++ b/src_v2/parser/parser_types.nim @@ -92,6 +92,7 @@ func tokenStringValue*(x: ParserToken): string = func tokensToString*(tokens: seq[ParserToken]): string = tokens.foldl(a & b.tokenStringValue(), "") + # -- Modifiers func flattenParserTokens*(parser: Parser): ParserResult = @@ -124,6 +125,12 @@ func foldTokens*[T]( let err = parserResult.error() onError(err) +func tokensToString*(parserResult: ParserResult, fallback = ""): string = + parserResult.foldTokens( + err => fallback, + xs => xs.tokensToString(), + ) + func setErrorExpectedField*(err: ParserError, expected: string): ParserError = ParserError( kind: err.kind,