in Cyborg/ParserPrimitives.swift [125:145]
func oneOrMore<T>(of parser: @escaping Parser<T>) -> Parser<[T]> {
return { stream, index in
switch parser(stream, index) {
case .ok(let result, let index):
var nextIndex = index
var results = [result]
findMoreMatches: while true {
switch parser(stream, nextIndex) {
case .ok(let result, let index):
nextIndex = index
results.append(result)
case .error:
break findMoreMatches
}
}
return .ok(results, nextIndex)
case .error(let error):
return .error(.noMatchesFound(error))
}
}
}