in Sources/SIL/Parser.swift [143:159]
func parseMany<T>(
_ pre: String, _ sep: String, _ suf: String, _ parseOne: () throws -> T
) throws -> [T] {
try take(pre)
var result = [T]()
if !peek(suf) {
while true {
let element = try parseOne()
result.append(element)
guard !peek(suf) else { break }
guard !sep.isEmpty else { continue }
try take(sep)
}
}
try take(suf)
return result
}