diff --git a/src/parser/parser.nim b/src/parser/parser.nim index c80dc03..43b437e 100644 --- a/src/parser/parser.nim +++ b/src/parser/parser.nim @@ -204,11 +204,6 @@ proc endOfStream*(parser: Parser): ParserResult = parser: parser, )) -proc newline*(parser: Parser): ParserResult = - parser - .endOfStream() - .flatMap(ch(NewLines)) - func ignore*(parserFn: Parser -> ParserResult): (Parser -> ParserResult) {.inline.} = ## Parse characters but throw success tokens away return proc(parser: Parser): ParserResult = @@ -271,6 +266,13 @@ proc `+`*(parserFnA: Parser -> ParserResult, parserFnB: Parser -> ParserResult): return proc(parser: Parser): ParserResult = parserFnA(parser).flatMap(parserFnB) + +let newlineParser = choice(@[ + endOfStream, + ch(NewLines) +]) +proc newline*(parser: Parser): ParserResult = newlineParser(parser) + proc parseSeq*(parser: ParserResult, xs: seq[Parser -> ParserResult]): ParserResult = xs.foldl(a.flatMap(b), parser) @@ -362,8 +364,8 @@ when isMainModule: ] assert: "ABC".testParser(andParser) == @['A', 'B', 'C'] - let newlineParser = @[ + let newlineParserTest = @[ str("ABC"), newline ] - echo "ABC".testParser(newlineParser) + echo "ABC\n".testParser(newlineParserTest)