Structure

This commit is contained in:
Florian Schroedl
2022-01-20 17:00:00 +01:00
parent 5863304456
commit 20712cef95
5 changed files with 63 additions and 169 deletions

40
src/org_parser.nim Normal file
View File

@@ -0,0 +1,40 @@
import std/sugar
import std/strformat
import std/collections/sequtils
import std/strutils
import parser/parser
import results
when isMainModule:
let parseHeadingStars = @[
manyUntil(ch('*'), ch(' ')),
ignore(ch(' '))
]
let parseHeadingText = @[
anyUntil(endOfStream),
]
type StringBuilderT = string
type StringBuilder = Builder[StringBuilderT]
type StringBuilderResult = BuilderResult[StringBuilderT]
proc stringConcat(typeInfo: StringBuilderT):
(seq[Token], seq[StringBuilderT]) -> seq[StringBuilderT] =
return proc(xs: seq[Token], ys: seq[StringBuilderT]): seq[StringBuilderT] =
return ys & xs.foldl(a & b.value, typeInfo)
let sampleBuilder = StringBuilderResult
.ok(StringBuilder((
parser: initParser("**** Some stars"),
tree: newSeq[StringBuilderT](),
)))
.applyParsersSeq(@[
(parseHeadingStars, stringConcat("Stars: ")),
(parseHeadingText, stringConcat("Text: "))
])
.foldBuilder(
err => &"Error Parsing: {err}",
xs => "Parser Succesfull:\n" & xs.join("\n"),
)
echo sampleBuilder