coincidencias no codiciosas en Scala RegexParsers

Supongamos que estoy escribiendo un analizador de SQL rudimentario en Scala. Tengo lo siguiente:

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
}

Cuando intente hacer coincidir la declaración select conSELECT foo FROM bar, ¿cómo evito que la cláusula selectiva engulle la frase completa debido a larep(token) in~ tokens?

n otras palabras, ¿cómo especifico una coincidencia no codiciosa en Scala?

Para aclarar, soy plenamente consciente de que puedo usar la sintaxis no codiciosa estándar (*?) O (+?) Dentro del patrón String, pero me pregunté si hay una manera de especificarlo en un nivel superior dentro de tokens de definición . Por ejemplo, si hubiera definido un token como este:

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

Entonces, ¿cómo puedo especificar una coincidencia no codiciosa para el representante (token) dentro de los tokens def?

Respuestas a la pregunta(1)

Su respuesta a la pregunta