correspondência não gananciosa no Scala RegexParsers

Suponha que eu esteja escrevendo um analisador SQL rudimentar no Scala. Eu tenho o seguinte:

class Arith extends RegexParsers {
    def selectstatement: Parser[Any] = selectclause ~ fromclause
    def selectclause: Parser[Any] = "(?i)SELECT".r ~ tokens
    def fromclause: Parser[Any] = "(?i)FROM".r ~ tokens
    def tokens: Parser[Any] = rep(token) //how to make this non-greedy?
    def token: Parser[Any] = "(\\s*)\\w+(\\s*)".r
}

Ao tentar combinar a declaração de seleção comSELECT foo FROM bar, como evito que a cláusula select devore a frase inteira devido aorep(token) dentro~ tokens?

Em outras palavras, como faço para especificar a correspondência não gananciosa no Scal

ara esclarecer, estou ciente de que posso usar a sintaxe não gananciosa padrão (*?) Ou (+?) Dentro do próprio padrão String, mas me perguntei se havia uma maneira de especificá-lo em um nível mais alto dentro dos tokens de definição. . Por exemplo, se eu tivesse definido o token assim:

def token: Parser[Any] = stringliteral | numericliteral | columnname

Então, como posso especificar uma correspondência não gananciosa para o representante (token) dentro dos tokens de definiçã

questionAnswers(1)

yourAnswerToTheQuestion