Add EndOFString parsing error

This commit is contained in:
Florian Schroedl
2022-01-20 17:00:00 +01:00
parent 288380cab7
commit d98cf8adf1

View File

@@ -97,6 +97,15 @@ proc `$`*(x: ParserError): string =
&"""Parsing Error (Character Mismatch Error): &"""Parsing Error (Character Mismatch Error):
{original} {original}
{errSpace}^ Expected '{expected}' but got '{unexpected}'""" {errSpace}^ Expected '{expected}' but got '{unexpected}'"""
of endOfStringErr(parser: @parser, index: @index):
let original = parser.state.stream
let errSpace = " ".repeat(max(0, index))
&"""Parsing Error (EndOfString Expected):
{original}
{errSpace}^ Expected 'EndOfString'"""
else: "ParseError" else: "ParseError"
proc initParser*(str: string): Parser = proc initParser*(str: string): Parser =
@@ -330,7 +339,9 @@ proc foldBuilder*[T, T2](
when isMainModule: when isMainModule:
proc getTokens(x: ParserResult): seq[char] = proc getTokens(x: ParserResult): seq[char] =
x.foldTokens( x.foldTokens(
proc(err: ParserError): seq[char] = @[], proc(err: ParserError): seq[char] =
echo err
@[],
proc(xs: seq[Token]): seq[char] = xs.map((x: Token) => x.value), proc(xs: seq[Token]): seq[char] = xs.map((x: Token) => x.value),
) )
@@ -350,8 +361,8 @@ when isMainModule:
] ]
assert: "ABC".testParser(andParser) == @['A', 'B', 'C'] assert: "ABC".testParser(andParser) == @['A', 'B', 'C']
# let newlineParser = @[ let newlineParser = @[
# str("ABC"), str("ABC"),
# newline newline
# ] ]
# echo initParserResult("ABC").parseSeq(newLineParser) echo "ABC".testParser(newlineParser)