Structure
This commit is contained in:
40
src/org_parser.nim
Normal file
40
src/org_parser.nim
Normal 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
|
||||
Reference in New Issue
Block a user