Started refactor
This commit is contained in:
31
src_v2/parser/utils.nim
Normal file
31
src_v2/parser/utils.nim
Normal file
@@ -0,0 +1,31 @@
|
||||
import std/sugar
|
||||
import std/collections/sequtils
|
||||
import results
|
||||
import ./parser_types
|
||||
|
||||
type StringBuilderT* = string
|
||||
type StringBuilder* = Builder[StringBuilderT]
|
||||
type StringBuilderResult* = BuilderResult[StringBuilderT]
|
||||
|
||||
proc stringConcat*(typeInfo: StringBuilderT, seperator = ""):
|
||||
(seq[ParserToken], seq[StringBuilderT]) -> seq[StringBuilderT] =
|
||||
|
||||
return proc(xs: seq[ParserToken], ys: seq[StringBuilderT]): seq[StringBuilderT] =
|
||||
return ys & xs.foldl(a & b.tokenStringValue() & seperator, typeInfo)
|
||||
|
||||
proc initStringBuilder*(str: string): StringBuilderResult =
|
||||
StringBuilderResult
|
||||
.ok(StringBuilder((
|
||||
parser: initParser(str),
|
||||
tree: newSeq[StringBuilderT](),
|
||||
)))
|
||||
|
||||
proc fold*[T, E, T2](
|
||||
self: Result[T, E],
|
||||
onError: E -> T2,
|
||||
onSuccess: T -> T2,
|
||||
): T2 =
|
||||
if self.isOk():
|
||||
onSuccess(self.unsafeGet())
|
||||
else:
|
||||
onError(self.error())
|
||||
Reference in New Issue
Block a user