не жадное сопоставление в Scala RegexParsers

Предположим, я пишу элементарный парсер SQL в Scala. У меня есть следующее:

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
}

При попытке сопоставить selectstatement противSELECT foo FROM bar, как я могу предотвратить, чтобы предложение select сожрало всю фразу из-заrep(token) в~ tokens?

Другими словами, как мне указать не жадное сопоставление в Scala?

Чтобы уточнить, я полностью осознаю, что могу использовать стандартный не жадный синтаксис (*?) Или (+?) Внутри самого шаблона String, но мне было интересно, есть ли способ указать его на более высоком уровне внутри токенов def. Например, если бы я определил токен так:

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

Тогда как я могу указать не жадное соответствие для rep (токена) внутри токенов def?

Ответы на вопрос(1)

Ваш ответ на вопрос