
parser4k.repeat.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of parser4k Show documentation
Show all versions of parser4k Show documentation
ForkHandles Parser Combinator library
package parser4k
fun repeat(parser: Parser, atLeast: Int = 0, atMost: Int = Int.MAX_VALUE) = Parser> { input ->
val payload = ArrayList()
var nextInput = input
while (true) {
val output = parser.parse(nextInput) ?: break
nextInput = output.nextInput
payload.add(output.payload)
if (payload.size == atMost) break
}
if (payload.size >= atLeast) Output(payload, nextInput) else null
}
fun zeroOrMore(parser: Parser): Parser> = repeat(parser, atLeast = 0)
fun oneOrMore(parser: Parser): Parser> = repeat(parser, atLeast = 1)
fun optional(parser: Parser): Parser = repeat(parser, atLeast = 0, atMost = 1).map { it.firstOrNull() }
© 2015 - 2025 Weber Informatics LLC | Privacy Policy