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):
{original}
{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"
proc initParser*(str: string): Parser =
@@ -330,7 +339,9 @@ proc foldBuilder*[T, T2](
when isMainModule:
proc getTokens(x: ParserResult): seq[char] =
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),
)
@@ -350,8 +361,8 @@ when isMainModule:
]
assert: "ABC".testParser(andParser) == @['A', 'B', 'C']
# let newlineParser = @[
# str("ABC"),
# newline
# ]
# echo initParserResult("ABC").parseSeq(newLineParser)
let newlineParser = @[
str("ABC"),
newline
]
echo "ABC".testParser(newlineParser)