Extract properties block parser to file

This commit is contained in:
Florian Schroedl
2022-01-20 17:00:00 +01:00
parent cad191a976
commit 21a6234149
5 changed files with 131 additions and 88 deletions

View File

@@ -33,8 +33,8 @@ type
# keyValuePairValue*: parserTokenKeyValuePairValueT
Parser* = ref object
state: ParserState
tokens: seq[ParserToken]
state*: ParserState
tokens*: seq[ParserToken]
ParseErrorKind = enum
choiceMismatchErr
@@ -238,6 +238,26 @@ func ignore*(parserFn: Parser -> ParserResult): (Parser -> ParserResult) {.inlin
tokens: parser.tokens,
))
func flattenParserTokens*(parser: Parser): ParserResult =
return ParserResult.ok(
Parser(
state: parser.state,
tokens: @[
ParserToken(
kind: parserTokenString,
stringValue: parser.tokens.foldl(a & b.tokenStringValue(), "")
)
]
)
)
func emptyTokens*(parser: Parser): Parser =
Parser(
state: parser.state,
tokens: newSeq[ParserToken](),
)
func optional*(parserFn: Parser -> ParserResult): (Parser -> ParserResult) {.inline.} =
## Parse characters and ignore failure
return proc(parser: Parser): ParserResult =
@@ -293,8 +313,8 @@ proc `+`*(parserFnA: Parser -> ParserResult, parserFnB: Parser -> ParserResult):
let newlineParser = choice(@[
ch(NewLines),
endOfStream,
ch(NewLines)
])
proc newline*(parser: Parser): ParserResult = newlineParser(parser)