All Downloads are FREE. Search and download functionalities are using the official Maven repository.

parser4k.repeat.kt Maven / Gradle / Ivy

There is a newer version: 2.20.0.0
Show newest version
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